存档

2016年6月 的存档

监听手机截屏事件

2016年6月29日 没有评论

猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!
原文地址: http://blog.csdn.net/cocos2der/article/details/51780954

今天无意中在百度地图中截屏路线的时候,顶部出现提示我的截屏信息。这细节挺好的,省去我后面需要使用该截屏的繁琐步骤。刚好手头空闲会,我也写个玩玩。哈哈哈~~

截屏在iOS7以前是需要使用小技巧来获取用户截屏事件的,iOS7之后,apple开放了用户截屏通知事件,所以现在做起来还是挺方便的。

// This notification is posted after the user takes a screenshot (for example by pressing both the home and lock screen buttons)
@available(iOS 7.0, *)
public let UIApplicationUserDidTakeScreenshotNotification: String

注册通知

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.userDidTakeScreenshot), name: UIApplicationUserDidTakeScreenshotNotification, object: nil)

代码实现(swift)

/// 用户截屏完毕
    func userDidTakeScreenshot() {
        // 当前屏幕的image
        // 注意:为什么不直接从相册读取截屏图像
        //(万一用户直接拒绝可权限你不跪了,何况截屏之后,用户可不知道你会提示,第一反应肯定拒绝读取相册的权限)
        let image = imageWithScreenshot()

        let imageView = UIImageView(frame: CGRect(x: 50, y: 50, width: 320, height: 640))
        imageView.image = image
        self.view.addSubview(imageView)
    }

    /// 获取当前屏幕图片
    func imageWithScreenshot() -> UIImage? {
        let imageData = dataWithScreenshotInPNGFormat()
        return UIImage(data: imageData)
    }

    /// 截取当前屏幕
    func dataWithScreenshotInPNGFormat() -> NSData {
        var imageSize = CGSizeZero
        let screenSize = UIScreen.mainScreen().bounds.size
        let orientation = UIApplication.sharedApplication().statusBarOrientation
        if UIInterfaceOrientationIsPortrait(orientation) {
            imageSize = screenSize
        } else {
            imageSize = CGSizeMake(screenSize.height, screenSize.width)
        }

        UIGraphicsBeginImageContextWithOptions(imageSize, false, 0)
        let context = UIGraphicsGetCurrentContext()

        for window in UIApplication.sharedApplication().windows {
            CGContextSaveGState(context)
            CGContextTranslateCTM(context, window.center.x, window.center.y)
            CGContextConcatCTM(context, window.transform)
            CGContextTranslateCTM(context, -window.bounds.size.width * window.layer.anchorPoint.x, -window.bounds.size.height * window.layer.anchorPoint.y)

            if orientation == UIInterfaceOrientation.LandscapeLeft {
                CGContextRotateCTM(context, CGFloat(M_PI_2))
                CGContextTranslateCTM(context, 0, -imageSize.width)
            } else if orientation == UIInterfaceOrientation.LandscapeRight {
                CGContextRotateCTM(context, -CGFloat(M_PI_2))
                CGContextTranslateCTM(context, -imageSize.height, 0)
            } else if (orientation == UIInterfaceOrientation.PortraitUpsideDown) {
                CGContextRotateCTM(context, CGFloat(M_PI))
                CGContextTranslateCTM(context, -imageSize.width, -imageSize.height)
            }
            if window.respondsToSelector(#selector(UIView.drawViewHierarchyInRect(_:afterScreenUpdates:))) {
                window.drawViewHierarchyInRect(window.bounds, afterScreenUpdates: true)
            } else {
                window.layer.renderInContext(context!)
            }
            CGContextRestoreGState(context);
        }
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return UIImagePNGRepresentation(image)!
    }

注意:为什么不直接从相册读取截屏图像?
万一用户直接拒绝可权限你不跪了,何况截屏之后,用户可不知道你会提示,第一反应肯定拒绝读取相册的权限。

分类: 未分类 标签:

Unity3d开发(十五) AudioClip 参数解析

2016年6月25日 没有评论
Unity3d开发(十五) AudioClip 参数解析



Audio Clip

AudioClip 面板有很多参数,设置起来容易出错,这里记录一下,做备忘。

Unity3d开发(十五) AudioClip 参数解析
  • Force To Mono: 将多声道的声音合并成单声道,声音文件大小直接干掉好多,手机必选。合并声道之后,勾选Normalize可以使声音听起来更优一些。
  • Load In Background: 在后台加载,这可以使得声音不阻塞主加载线程。它默认是关闭的,官方的说法是为了保证游戏运行时声音体验的一致性。我觉得如果加载不会引起运行时卡顿,那么相对于提升加载时间和减少加载数量的优势,还是值得将其勾选的。
  • Preload Audio Data: 在进入场景时预加载音效,如果不勾选那么直到第一次被使用时才加载。背景音乐估计妥妥不勾选了,UI音效我觉得倒是可以勾上,反正基本都是要加载的,就别占用运行时间了。
  • Load Type – Decompress On Load: 声音一旦被加载就会解压储存内存中。这可以提供更好的声音响应,但会占用内存,尤其是Vorbis编码的声音,因此比较适合短小的声音。
  • Load Type – Compressed In Memory: 声音在内存中以压缩的形式储存,等播放时再解压。这种方式有轻微的效率消耗,但节省了内存,因此适合Vorbis形式的大文件。这部分消耗可以在 Profiler中Audio面板的DSP CPU看到。
  • Load Type – Streaming: 播放时解码。这种方式占用内存最小,却增加了磁盘读写和解压。这部分消耗可以在 Profiler中Audio面板的Streaming CPU看到。基本上是大文件才会采用的设置。
  • Compression Format – PCM: 最高的质量,最大的文件
  • Compression Format – ADPCM: 一些包含噪音,且会被多次播放的的音频,可以采用这个格式,例如,脚步,打击,武器等。它的比PCM压缩了3.5倍,CPU消耗却比Vorbis小,是高频小声音的最佳选择。
  • Compression Format – Vorbis: 压缩的更小的文件,但质量就不太过关了。压缩率可以在Quality中配置,可以边听边选,最后确定一个合适的压缩率。
  • Compression Format – Quality: 压缩比率,只对Vorbis类型有效果。最终文件大小在Inspector中可以看到。
  • Sample Rate Setting – Preserve Sample Rate: 先前默认的值。
  • Sample Rate Setting – Optimize Sample Rate: 通过最高频率分析优化之后的值,并不知道啥意思~
  • Sample Rate Setting – Override Sample Rate: 自定义的采样率的值。建议用默认的。

如果你觉得这篇文章对你有帮助,可以顺手点个,不但不会喜当爹,还能让更多人能看到它… Unity3d开发(十五) AudioClip 参数解析

分类: 未分类 标签:

[置顶] Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入

2016年6月23日 没有评论

火云开发课堂开讲啦!

Cocos开发VR菜鸟宝典

        

                  本套课程分为基础班和高级班两种,基础班主要在CSDN上推出视频,学员自学为主。高级班在此基础上再进行项目实训(包含Cocos3D,Shader基础班和VR设备学习套装)

有兴趣参加高级班的可以加我QQ:285421210.

第七章:平台的选择与接入



视频地址:http://edu.csdn.net/course/detail/2366/36775?auto_start=1

[置顶]        Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入

[置顶]        Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入

[置顶]        Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入

[置顶]        Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入

[置顶]        Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入

[置顶]        Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入

[置顶]        Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入

[置顶]        Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入

[置顶]        Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入

[置顶]        Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入

[置顶]        Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入


[置顶]        Cocos开发VR菜鸟宝典 第七讲:平台的选择与接入








<