写了一个拍照或者选择照片完成后,弹出照片编辑框的viewcontroller,应当在拍照完毕,或者照片选择完毕之后弹出,但是在ios 8.1以上的系统,没有任何问题,但是到了ios 7.0或者7.1,问题就出现了,这个编辑相片的viewcontroller怎么也弹出不了;几经查找之后,发现调用的窗口弹出函数,没有旧版本的问题。
最后找来ios 7.0系统的真机,在xcode下打断点,发现警告,最终查明问题,是viewcontroller弹出动作和动画过程有冲突,总结如下:
所有下一步动作,应该加在动画结束之后
应当做如下设置
//完成照片选择
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
UIImage *image = info[UIImagePickerControllerOriginalImage];
[picker dismissViewControllerAnimated:YES completion:^{
[self openEditor:image];
}];
}
而不应该写成
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
UIImage *image = info[UIImagePickerControllerOriginalImage];
[picker dismissViewControllerAnimated:YES completion:nil];
[self openEditor:image];
}
应当将 [self openEditor:image];这个动作加到动画结束的completion: block中,保证动画结束后再执行弹出动作,而第二种方式在ios 7.0中就会有警告,并且上一步的 dismissViewControllerAnimated窗口动画可能并未结束,紧接着[self openEditor:image];动作就要执行了,这里面有另外的窗口弹出动画过程,最终造成窗口弹出失败。看似细节的问题,完全可以避免,由于写法不够严谨,却造成了很大问题。