小编chr*_*ysb的帖子

带allowEditing的UIImagePickerController不允许平移裁剪

我在这里看到了这个问题:UIImagePicker允许编辑卡在中心

似乎以前有人遇到过这个问题,但是没有明确的解决方案.

复制步骤:

  1. 设置allowEditing = YES
  2. 拍张照片
  3. 裁剪窗口出现,但每次我平移图像时,它都会快速回到中心.

我在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)

uiimagepickercontroller ios ios7

20
推荐指数
1
解决办法
4896
查看次数

SwiftUI:将 LazyVStack 或 LazyHStack 放入 ScrollView 会导致口吃(Apple 错误??)

XCode 版本 12.4 (12D4e)

每次在 ScrollView 中实现 Lazy 堆栈时,我都会遇到这个问题:

  1. 添加 aLazyHStack到水平ScrollView或 aLazyVStack到垂直ScrollView
  2. 添加足够的内容,使滚动视图的内容大小超出其边界

场景 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) 中。

在下面的视频中,注意滚动条的行为和到达底部时的卡顿:

https://youtu.be/z2pybl5yYqk …

xcode ios swift swiftui swiftui-scrollview

20
推荐指数
2
解决办法
1420
查看次数

当视图消失时,UIView动画停止,重新出现时不再恢复

这是我的配置:

我有一个带有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,动画就会停止/暂停.我无法重新开始.

我试过了:

  1. 听取申请将辞职/变得活跃.辞职时,我做了[self.view.layer removeAllAnimations],然后尝试使用上面的代码再次启动动画.
  2. 删除动画的UIImageView并将其添加回父视图,然后尝试启动动画.

我很遗憾在这里使用约束,但是很想知道可能存在什么问题.

谢谢!

iphone uiview uiviewanimation ios ios6

12
推荐指数
3
解决办法
6619
查看次数

当应用程序进入后台时,NSCache总是驱逐图像数据

这可能是预期的行为,但Apple没有明确说明.

我正在使用NSCache缓存一些图像给我UICollectionView.当我将应用程序放在后台并立即再次打开时,我的所有图像都不在了NSCache.

理想情况下,我希望最近加载的图像保持缓存状态,这样当用户重新打开应用程序时,他们不必再支付加载所有图像的费用.似乎NSCache应该允许不那么激进的缓存策略.

我只想在这里发帖进行一次健全检查,并确保我没有遗漏任何明显的东西.

否则,我将不得不实现自己的缓存,只将最后25个加载的图像保存在NSMutableDictionary缓存中.

ios nscache

8
推荐指数
2
解决办法
3365
查看次数

ScrollView 内的 LazyVStack 中具有可变高度的内容会导致口吃/跳跃

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 的生产就绪。

有没有其他人解决过这个问题? …

uiscrollview ios swift swiftui

7
推荐指数
1
解决办法
248
查看次数

AVFoundation:isExposureModeSupported为AVCaptureExposureModeAutoExpose返回FALSE

我正在使用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)

}

xcode avfoundation ios

5
推荐指数
1
解决办法
590
查看次数