我在这里看到了这个问题:UIImagePicker允许编辑卡在中心
似乎以前有人遇到过这个问题,但是没有明确的解决方案.
复制步骤:
我在iOS 7.0.3上.
这是我的代码:
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.modalPresentationStyle = UIModalPresentationCurrentContext;
imagePicker.allowsEditing = YES;
[self presentViewController:imagePicker animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud) XCode 版本 12.4 (12D4e)
每次在 ScrollView 中实现 Lazy 堆栈时,我都会遇到这个问题:
LazyHStack到水平ScrollView或 aLazyVStack到垂直ScrollView场景 1 - 将滚动视图拉出边界(就像拉动以刷新)
预期行为:当滚动视图停留在您的手指下时,它的行为与预期一致
观察到的行为:它口吃和跳跃
场景 2 - 快速滚动到边缘,使其必须弹跳
预期行为:弹跳顺畅
观察到的行为:到达边缘时停止并抖动,但不反弹
我的理论 我的理论是,由于使用了 Lazy 堆栈,当视图离开屏幕时,它会从视图层次结构中移除,从而造成卡顿。
我想知道有没有其他人遇到过这种情况?这是 SwiftUI 中的错误吗?几个月来,我已经在不同的项目中可靠地重现了这一点,但最终还是不使用我希望可以使用的 Lazy 堆栈。
示例代码
ScrollView {
LazyVStack {
ForEach(viewModel.items) { items in
SomeView(viewModel: .init(context: viewModel.context, item: item))
}
}
Run Code Online (Sandbox Code Playgroud)
注意:口吃只发生在滚动视图的顶部
** 2021 年 7 月 10 日更新**
这仍然发生在 iOS 15 版本 13.0 测试版 (13A5155e) 中。
在下面的视频中,注意滚动条的行为和到达底部时的卡顿:
这是我的配置:
我有一个带有ListViewController的故事板.ListViewController有一个名为EmptyListView的子视图UIView.只有当UITableView中没有项目时才会显示EmptyListView,否则它将被隐藏.
EmptyListView有一个名为emptyListViewArrow的子视图UIImageView,它可视地指向按钮,在我的UITableView中创建一个新条目.这个箭头以无论是上下方式无限制地动画.
我监听EmptyListView在完成布局子视图后发送通知.我这样做是因为如果没有,变异约束的动画表现不正确.
- (void) layoutSubviews {
[super layoutSubviews];
[[NSNotificationCenter defaultCenter] postNotificationName:@"EmptyViewDidLayoutSubviews" object:nil];
}
Run Code Online (Sandbox Code Playgroud)
当ListViewController观察到此通知时,它会开始动画:
[UIView animateWithDuration:0.8f delay:0.0f options:(UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse) animations:^{
self.emptyListViewArrowVerticalSpace.constant = 15.0f;
[emptyListView layoutIfNeeded];
} completion:nil];
Run Code Online (Sandbox Code Playgroud)
如果我将应用程序放在后台或在堆栈上推送另一个ViewController,一旦我回到应用程序或ListViewController,动画就会停止/暂停.我无法重新开始.
我试过了:
我很遗憾在这里使用约束,但是很想知道可能存在什么问题.
谢谢!
这可能是预期的行为,但Apple没有明确说明.
我正在使用NSCache缓存一些图像给我UICollectionView.当我将应用程序放在后台并立即再次打开时,我的所有图像都不在了NSCache.
理想情况下,我希望最近加载的图像保持缓存状态,这样当用户重新打开应用程序时,他们不必再支付加载所有图像的费用.似乎NSCache应该允许不那么激进的缓存策略.
我只想在这里发帖进行一次健全检查,并确保我没有遗漏任何明显的东西.
否则,我将不得不实现自己的缓存,只将最后25个加载的图像保存在NSMutableDictionary缓存中.
XCode 13.0 测试版 (13A5155e) 和针对 iOS 14 或 15
我的目标是在 SwiftUI 中创建一个聊天视图。这需要创建具有不同高度内容的 ScrollView。
经过大量调试后,我确定如果 ScrollView 中有没有固定高度的视图,当您滚动到视图顶部时它会卡顿。
——————
项目: 下载这个项目并自己尝试
struct Message: Identifiable {
let id = UUID()
var text: String
}
struct ContentView: View {
@State var items: [Message] = MockData.randomMessages(count: 100)
var body: some View {
VStack {
Button("Shuffle items") {
items = MockData.randomMessages(count: 100)
}
ScrollView {
LazyVStack(spacing: 10) {
ForEach(items) { item in
Text(item.text)
.background(colors.randomElement()!)
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我现在的结论是LazyVStack仅适用于具有固定高度的子视图。仅此问题就阻止了 SwiftUI 的生产就绪。
有没有其他人解决过这个问题? …
我正在使用AVFoundation构建自定义相机.除了之外,一切都很好setExposurePointOfInterest.
我在iPhone 5上测试,AVCaptureDevice告诉我BackCamera不支持AVCaptureExposureModeAutoExpose.
然后我如何实施水龙头来调整曝光?
这是我的代码:
- (void)didTapCameraPreview:(UITapGestureRecognizer *)recognizer {
CGPoint point = [recognizer locationInView:self.view];
CGRect screenRect = [self.view bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
double focus_x = point.x/screenWidth;
double focus_y = point.y/screenHeight;
CGPoint touchPoint = CGPointMake(focus_x, focus_y);
AVCaptureDevice *device = (self.captureSession.inputs[0] == self.backCamera) ? self.backCamera.device : self.frontCamera.device;
if (device.isFocusPointOfInterestSupported) {
NSError *error;
if ([device lockForConfiguration:&error]) {
[device setFocusPointOfInterest:touchPoint];
[device setExposurePointOfInterest:touchPoint];
[device setFocusMode:AVCaptureFocusModeAutoFocus];
if ([device isExposureModeSupported:AVCaptureExposureModeAutoExpose]){
[device setExposureMode:AVCaptureExposureModeAutoExpose];
}
[device unlockForConfiguration];
}
}
Run Code Online (Sandbox Code Playgroud)
}