我有一个使用sourceType相机调用的UIImagePickerController,80%的时间我得到黑色预览.如果我等待,让我们说大约30秒,我会得到一个很好的预览,它会在大约50%的时间内好,然后它会再次破裂.
有问题的图像与此非常相似.iDevice相机显示黑色而不是预览
其他人暗示GCD可能会导致相机出现问题,并且在加载图像选择器时更新UI会破坏它.我为每个调用主线程的GCD块设置了一个锁.
这是旋转以模拟活动指示器的图像的示例.
-(void)animateLoadingImage {
if (isMainThreadBlocked) {
return;
}
self.radians += M_PI_4 / 2;
[UIView beginAnimations:@"progress rotation" context:nil];
[UIView setAnimationDuration:.1];
self.loadingImageView.transform = CGAffineTransformMakeRotation(self.radians);
[UIView commitAnimations];
}
Run Code Online (Sandbox Code Playgroud)
PS:快照未渲染的视图会导致空快照.确保在屏幕更新后快照或快照之前至少渲染了一次视图.
这会在我尝试打开拾取器控制器时显示ALWAYS,但即使相机正确显示预览,它也会显示.我不认为错误在这里,但这也让我很烦恼.
我正在开发一个应用程序,从iDevice的相机捕获图像并将其上传到Web服务.
没问题除了设备的相机外,一切正常.设备的相机让我疯狂.我使用下面的代码来允许用户捕获图像.有时相机显示预览,有时不显示.而不是预览只是在屏幕上显示完全黑暗.如果我从后面切换到前置摄像头,则开始正常工作.我甚至尝试从设备中删除所有后台应用程序并清除尽可能多的内存; 仍然没有运气,我被卡住了.:(
- (IBAction)addNewImage:(id)sender
{
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
// Take picture from camera
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
// set no to take as much pictures as user want.
imagePicker.showsCameraControls = YES;
// Show user the camera
[self presentModalViewController:imagePicker
animated:YES];
}
else
{
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:imagePicker
animated:YES];
}
}
Run Code Online (Sandbox Code Playgroud) 当我使用UIImagePickerController Camera捕获一些图像时,由于内存压力,我面临错误应用终止.
我先收到内存警告然后突然崩溃.这个问题在iOS 7中特别适用于iOS 6,它工作正常.
有人知道为什么在使用相机的iOS 7中会出现此内存问题.
注意:我试图最小化RAM使用率,因为它也可能是这种内存压力的原因.但仍然得到警告.
我有一个随机的问题,当我提出UIImagePickerController
捕捉照片.有时预览屏幕只是黑色.(这可能是第一次,可能是第二次,或者可以永远,甚至永远不会).然而,我可以看到相机控制,黄色方块可以进行人脸检测.如果我等待一段时间(约20秒),黑色预览消失,预览出现......
以下是我有时可以在日志中看到的内容:
快照未呈现的视图会导致空快照.确保在屏幕更新后快照或快照之前至少渲染了一次视图.
config:xcode 5.1.1,iPhone 5/5S,ios 7.0/7.1
这是一个为我重现问题的代码:
-(void) showCamera
{
UIImagePickerController *pickerController = [[UIImagePickerController alloc] init];
pickerController.allowsEditing = NO;
pickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
pickerController.cameraDevice = UIImagePickerControllerCameraDeviceFront;
pickerController.cameraOverlayView = nil;
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topController.presentedViewController) {
topController = topController.presentedViewController;
}
[topController presentViewController:pickerController animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
当然,对于我的真实应用程序,我测试是否有相机:
[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]);
Run Code Online (Sandbox Code Playgroud)
我发现了几个类似的问题,但没有任何真正的答案:
我已经尝试了他们的建议,没有成功.
编辑:这里有一些代码:正如所说的,我创建了一个单例类,子类化UIImagePickerController:
@implementation BBImagePickerController
static BBImagePickerController *sharedInstance = nil;
+ (BBImagePickerController *) sharedInstance
{
if (!sharedInstance)
sharedInstance = [[BBImagePickerController alloc] init];
return sharedInstance;
} …
Run Code Online (Sandbox Code Playgroud)