iOS8调用相机报警告Snapshotting a view的解决方法

因为我这也报了这个警告,所以把解决方法写到这个地方看是否其他人用的到,具体解决方法:

错误代码: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中,定义如下:

typedefNS_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中定义如下:

typedefNS_ENUM(NSInteger,
 UIModalPresentationStyle) {

    UIModalPresentationFullScreen
 = 0,

    UIModalPresentationPageSheetNS_ENUM_AVAILABLE_IOS(3_2),

    UIModalPresentationFormSheetNS_ENUM_AVAILABLE_IOS(3_2),

    UIModalPresentationCurrentContextNS_ENUM_AVAILABLE_IOS(3_2),

    UIModalPresentationCustomNS_ENUM_AVAILABLE_IOS(7_0),

    UIModalPresentationOverFullScreenNS_ENUM_AVAILABLE_IOS(8_0),

    UIModalPresentationOverCurrentContextNS_ENUM_AVAILABLE_IOS(8_0),

    UIModalPresentationPopoverNS_ENUM_AVAILABLE_IOS(8_0),

    UIModalPresentationNoneNS_ENUM_AVAILABLE_IOS(7_0)
 = -1,     

};

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

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

  self.modalPresentationStyle=UIModalPresentationOverCurrentContext;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • IOS打开系统相机的闪光灯

    IOS有两种的拍照和视频的方式: 1.直接使用UIImagePickerController,这个类提供了一个简单便捷的拍照与选择图片库里图片的功能. 2.另一种是通过AVFoundation.framework框架完全自定义拍照的界面和选择图片库界面.我只做了第一种,就先给大家介绍第一种做法: 一.首先调用接口前,我们需要先判断当前设备是否支持UIImagePickerController,用isSourceTypeAvailable:来判断是否可用 二.查看符合的媒体类型,这个时候我们调用a

  • Android实现IOS相机滑动控件

    IOS相比于Android,动画效果是一方面优势,IOS相机切换时滑动的动画很不错,看着是有一个3D的效果,而且变化感觉很自然.Android也可以通过Graphics下面的Camera可以实现3D效果,开始尝试着用这个做了一下,效果不理想,滑动之后各组文字之间的距离就变了,从立体空间来说这是合逻辑的,但是看着很别捏.IOS相机的滑动效果文字之间的间隔在滑动的时候是不变的. 后面通过调整TextView X方向的scale使文字看着紧凑一点,然后通过计算的距离的方式,在滑动的时候保持各组文字之间

  • iOS开发-调用系统相机和相册获取照片示例

    前言:相信大家都知道大部分的app都是有我的模块的,而在我的模块基本都有用户的头像等信息,并且是可以更改头像的.那么今天小编给大家简单介绍一下iOS开发中如何调用系统相机拍照或者相册获取照片.要获取系统相机或者相册,我们需要使用到 UIImagePickerController 这个类.下面我们来看一下如何实现: 首先,需要遵循 UIImagePickerController 代理的两个协议: <UIImagePickerControllerDelegate, UINavigationContr

  • iOS 10 使用相机相簿闪退的bug修正方法

    iOS 10 新规定,在取用相机,相簿,联络资讯,麦克风需要在 Info.plist 加入指定的 key,否则闪退: Info.plist <key>NSPhotoLibraryUsageDescription</key> <string>使用相簿需要您的同意</string> <key>NSCameraUsageDescription</key> <string>使用相机需要您的同意</string> <

  • iOS开发-自定义相机实例(仿微信)

    网上有很多自定义相机的例子,这里只是我临时写的一个小demo,仅供参考: 用到了下面几个库: #import <AVFoundation/AVFoundation.h> #import <AssetsLibrary/AssetsLibrary.h> 在使用的时候需要在Info.plist中把相关权限写进去: Privacy - Microphone Usage Description Privacy - Photo Library Usage Description Privacy

  • IOS10 相册相机闪退bug解决办法

    iOS10系统下调用系统相册.相机功能,遇到闪退的情况,描述如下: This app has crashed because it attempted to access privacy-sensitive data without a usage description.The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the use

  • iOS8调用相机报警告Snapshotting a view的解决方法

    因为我这也报了这个警告,所以把解决方法写到这个地方看是否其他人用的到,具体解决方法: 错误代码: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在调用系统相机拍照时,会有

  • 微信二次分享报错invalid signature问题及解决方法

    基于微信公众号开发的h5页面(使用jssdk接口),由用户A分享给用户B,用户B再次分享这个页面时,不能成功分享.问题出在用户B收到的分享链接与用户A打开的链接不同 A用户的链接为 http://test.com/test.html B用户收到的连接 http://test.com/test.html&from=singlemessage from=singlemessage是微信客户端为了区分分享来源再链接后自动添加的标记,再次分享时,需要在js代码中对自动获取的连接进行encodeURICo

  • 安装python时MySQLdb报错的问题描述及解决方法

    问题描述: windows安装python mysqldb时报错python version 2.7 required,which was not found in the registry 网上很多方案,比如方案一: Python3.x时, from _winreg import *  改为 from winreg import * 去掉下划线 import sys from _winreg import * # tweak as necessary version = sys.version

  • Linux下安装软件包报依赖等相关问题的解决方法

    目录 背景 1)开启 yum 的 keepchche 功能:方法1 2) yum-utils 软件:方法2 3) lrzsz 下载上传 背景 在内网服务器下无法利用yum进行安装,需要自行安装可能会出现相关依赖报错(依赖软件包版本不兼容)的情况出现,解决思路:可以找一台相同操作系统版本且支持yum下,通过已安装的软件包拷贝到另一台机器上进行安装. 1)开启 yum 的 keepchche 功能:方法1 vi /etc/yum.conf keepcache =1 # 修改为1 例:安装 iptab

  • Server.CreateObject的调用失败拒绝对此对象的访问的解决方法

    今天把一个网站的数据从win2000服务器转移到了win2003服务器上,然后调试,发现在用aspjpeg组件上传图片的时候,提示出错: 其实很多时候是因为你安装的插件权限设置不当造成的.应该坚持你最近安装了什么组件. 最终找到了解决"检查权限时,对Server.CreateObject的调用失败,拒绝对此对象的访问"的方法: windows server 2003默认的安全级别太高了,找到你组件所在的安装目录,右键/属性/安全,添加everyone(我用的是IUSR_WD)的可执行权

  • IIS FTP部分文件上传报错451的原因及解决方法

    最近部署一个基于IIS7的ftp服务器,添加一个组的用户具有上传及读取权限,使用Flashfxp软件测试了不同文件的上传下载,均可以正常使用.由于之前建FTP出现过使用浏览器访问不能验证用户的问题,于是也用浏览器进行测试,访问正常.正高兴呢.结果测试传几个文件遇到问题了.部分文件可以正常上传,但部分报错,具体错误提示如下: 找了下资料,发现原来是万国码问题,具体解决方法如下: 在FTP管理器的右边点击"高级设置"--将"允许UTF8"改为[False],如下图:

  • apache启动报 shmget() failed: Invalid argument的解决方法

    在用的apache服务器,启动报错: 复制代码 代码如下: shmget() failed:  Invalid argumentFailed to start up concurrent users module! 经检查为kernel.shmmax设置未生效(copy另一系统的,数值设置大了) 如下: 复制代码 代码如下: [root@localhost ~]# sysctl -a | grep shmmkernel.shmmni = 4096kernel.shmmax = 0 [root@l

  • Spring中DAO被循环调用的时候数据不实时更新的解决方法

    在描述问题之前先说明几个前提,假设在Spring的配置文件中使用下面的方式配置了数据库的事务: <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> <

  • MySQL5.6 GTID模式下同步复制报错不能跳过的解决方法

    数据库版本: mysql> select version(); +------------+ | version() | +------------+ | 5.6.10-log | +------------+ 1 row in set (0.02 sec) 同步复制信息: mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Wait

  • Windows安装Node.js报错:2503、2502的解决方法

    前言 Windows真的是太恶心了!!!不仅会出现大量的垃圾文件,而且有时莫名的安装不上一些软件(正常软件).前久因为想学学Koa2,打算升级下nodejs的版本以体验下ES6.ES7的aync,await等新特性,却死活安装不上nodejs同时也卸载不了老版的nodejs,不知所措,放了一段时间,今晚想看看D3准备学学,并借助Koa做个展示性的学习练手项目,决心查查资料解决下nodejs安装报错问题. 功夫不负有心人,终于得以解决,故以此文记录下. 目录权限问题? 首先我想是不是权限问题,于是

随机推荐