IOS8后UIImagePickConroller警告提示解决方法

错误代码:Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

问题分析:iOS8在调用系统相机拍照时,会有一两秒的停顿,然后再弹出UIImagePickConroller,IOS7是没有这个问题的,在百度找了无数遍都没能解决这个问题,有说要将imagePickController设置为全局变量,有说要延时0.5秒再presentViewController的,各显神通,但很遗憾的都没能解决这个问题,今天特意单独写个Demo来研究此问题,终于取得了突破性的进展!

其实根本原因不在于系统拍照控制器上面,而是执行presentViewController这个动作本身!我们可以查看下UIViewController这个类,他有一个属性

@property(nonatomic,assign) UIModalPresentationStyle modalPresentationStyle NS_AVAILABLE_IOS(3_2);

这是一个枚举值,在iOS7的SDK中,定义如下:

typedef NS_ENUM(NSInteger, UIModalPresentationStyle) {

    UIModalPresentationFullScreen = 0,

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2

    UIModalPresentationPageSheet,

    UIModalPresentationFormSheet,

    UIModalPresentationCurrentContext,

#endif

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_0

    UIModalPresentationCustom,

    UIModalPresentationNone = -1,       

#endif       

};

在iOS8的SDK中定义如下:

typedef NS_ENUM(NSInteger, UIModalPresentationStyle) {

        UIModalPresentationFullScreen = 0,

        UIModalPresentationPageSheet NS_ENUM_AVAILABLE_IOS(3_2),

        UIModalPresentationFormSheet NS_ENUM_AVAILABLE_IOS(3_2),

        UIModalPresentationCurrentContext NS_ENUM_AVAILABLE_IOS(3_2),

        UIModalPresentationCustom NS_ENUM_AVAILABLE_IOS(7_0),

        UIModalPresentationOverFullScreen NS_ENUM_AVAILABLE_IOS(8_0),

        UIModalPresentationOverCurrentContext NS_ENUM_AVAILABLE_IOS(8_0),

        UIModalPresentationPopover NS_ENUM_AVAILABLE_IOS(8_0),

        UIModalPresentationNone NS_ENUM_AVAILABLE_IOS(7_0) = -1, 

解决问题的关键部分来了,IOS8多了一个样式UIModalPresentationOverCurrentContext,IOS8中presentViewController时请将控制器的modalPresentationStyle设置为UIModalPresentationOverCurrentContext,问题解决!!

if ([[[UIDevice currentDevice] systemVersion] floatValue]>=8.0) {

    self.modalPresentationStyle=UIModalPresentationOverCurrentContext;

}

时间: 2024-11-09 09:45:49

IOS8后UIImagePickConroller警告提示解决方法的相关文章

eclipse 中提示tomcat 的端口被占用了 后的最快捷解决方法

很多时候运行tomcat 的时候总是会提示tomcat 的端口呗占用 但是任务管理器里面还找不到是哪个端口被占用了 因此很多人就重新配置tomcat  或者去修改tomcat的端口号 ,其实这么做太麻烦了 ,小弟在这里告诉你一个非常简单的方法. 1.在开始菜单中选择运行  然后输入cmd  进入DOS界面.显示如下: 2.在Dos窗口中输入netstat   -ano|findstr  8080(注意的 我的透明cat 的断口号 是8080 你的断口号是多少就写多少) 输入完成后回车 会弹出下面

Debian9安装Atom后无法启动之解决方法

Debian9安装Atom后无法启动之解决方法 在Atom官网下载了适合于Debian的安装包后,使用$ sudo dpkg -i Atom.deb进行了安装,然后点击Atom的图标启动时,发现加载半天后退出了. 打开命令行,执行命令$ atom,发现有错误提示,提示内容如下: 大专栏  Debian9安装Atom后无法启动之解决方法ht">$ atom $ atom 依赖于libgconf-2.4.so,单并没有发现该so文件,加载失败 原来是缺少依赖了,不多说,直接修复缺少的依赖: $

Ubuntu Server 14.04 选择中文安装后日期乱码的解决方法

Ubuntu Server 14.04选择中文安装后,默认的/etc/default/locale会使某些中文日期乱码,执行ll和date可见. /etc/default/locale 原来内容为: LANG="zh_CN.UTF-8" LANGUAGE="zh_CN:zh" LC_NUMERIC="zh_CN" LC_TIME="zh_CN" LC_MONETARY="zh_CN" LC_PAPER=&q

CUDA程序编译过程中产生警告的解决方法

有时候经常使用别人用Tabhost+其它的实现demo.单纯利用Tabhost该如何使用呢? 下面看例子: public class MainActivity extends TabActivity { public TabHost tabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 获取对象 tabHost = getTabH

mono 3.4.0 make install的时候出现"找不到 Microsoft.Portable.Common.targets 文件”的错误提示解决方法

如果在这时就进行配置安装Mono的话,会在make阶段得到一个“找不到 Microsoft.Portable.Common.targets 文件”的错误提示, 所以需要先进行如下处理: #> cd (mono安装路径的前缀)/mono-3.4.0/mcs/tools/xbuild/targets #> cp Microsoft.Portable.CSharp_4.0.targets Microsoft.Portable.Common.targets #> vim Microsoft.Po

eclipse导入android项目后出现错误的解决方法

eclipse导入android项目后出现错误的解决方法 出现这样的错误是因为没有为项目指定sdk的原因 为项目指定sdk的方法右键点击工程名称,弹出菜单中点击“Properties->Android”,在Project build target 中指定你要使用的SDK版本即可

中文后乱码问题的解决方法(可能解决)

用 Sublime Text 2 保存中文后乱码问题的解决方法(可能解决) https://blog.twofei.com/blog iconv字符编码转换 UTF-8 UCS-2(LE/BE) GBK 在群里面听到有人说起有一款新的编辑器 Sublime Text 2 很不错, 于是我下载下来试用了一下, 发现不支持中文, 听说要安装什么插件, 不管了, 没打算用, 但... 我打开了我的一个源代码C文件, 突然发现了一点小错误, 就用ST2修改后Ctrl+S保存了, 当时没在意什么, 到了几

开启ESXi Shell或SSH后ESXi出现警告的解决方法

开启ESXi的ssh后,在主机摘要上会提示有警告信息; 解决办法如下: vSphere Client登入到ESXi主机; 点击所选主机,依次选择"配置"→"高级设置" 找到UserVars -> UserVars.SuppressShellWarning选项,将值从0改为1即可 如下图所示:

xcode升级到6.0以后遇到的警告错误解决方法

Xcode 升级后,常常遇到的遇到的警告.错误,解决方法 从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo”  is deprecated解决办法:查看xoxoxoxo的这个方法的文档,替换掉这个方法即可. 2,警告:Declaration of "struct sockaddr" will not be visible outside of this function解决办法:在你的开源.m文件中添加 #import