存档

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菜鸟宝典 第七讲:平台的选择与接入








分类: 未分类 标签:

Unity3d(十四) AssetBundle中的资源提取

2016年6月22日 没有评论



做过破解的人都知道,游戏中的美术资源没法完全加密,即便使用特别复杂的加密方式,也有办法将其中的资源提出来。这里不讨论的太深,只借助现成的工具,做些浅显的资源提取。

解析 Bundle

disunity

这是基于Java实现的资源提取工具。它的优点在于Mac上也可以使用,另外就是支持命令行操作,这方便我们执行一些批处理操作。感兴趣可以去开源项目的Github地址,中文的介绍雨松写过一篇科普文

UABE

UABE(Unity Assets Bundle Extractor)是一个编辑AssetBundle的工具,可以将AssetBundle中的资源提取出来,也可以把编辑后的资源信息存入AssetBundle。这不是个开源项目,它是使用C++编写的。作者提供了静态和动态库,以方便进程进批处理程序中。另外它也提供了一个可视界面,虽然low了一点,但界面毕竟不是重点。它也有个Github页面,不过只用来反馈issue。界面如下:

Unity3d(十四) AssetBundle中的资源提取

使用时,先点击File->Open,然后选择要导入的AssetBundle,如果是压缩过的Bundle,会弹出提醒,将文件先另存为未压缩的版本。点击Export可以导出Assets,点击Import可以加入其他资源,并在File-Open中将其保存。Info可以用来预览Bundle文件的详细信息。如果要导出供其他软件使用,需要勾选“Remove the TypeTree”。

预览 Asset

Unity Assets Explorer

这是一个预览Asset文件内容的工具。可以在这里下载,这个工具没找到作者和代码出处,有知道的欢迎在下面留言。这个工具直接是个exe,对于这种莫名其妙下到的exe,我还是怕怕的,没准那天谁往里加个木马呢。

Unity3d(十四) AssetBundle中的资源提取

点击Open Assets-file可以打开面板选择资源文件。加载后可看到详细信息,点击Extract All可以将文件导出到exe同级目录,微微有些low Unity3d(十四) AssetBundle中的资源提取 同时也会导出一堆杂七杂八的二进制,我猜想是文件索引信息。

Unity Studio

如果你的Bundle特别大,上面的那个工具就吃不消了。所幸后浪推前浪,就有了UnityStudio项目。它可以打开Asset文件预览,理论上也可以提取Bundle,不过我并没有成功。它也可以直接预览图片、shader、文本文件,并分目录导出资源和模型。项目是用C#写的,想定制些功能也可以自己改 Unity3d(十四) AssetBundle中的资源提取

Unity3d(十四) AssetBundle中的资源提取

基本上就介绍这么多不吧,估计暂时够用了 Unity3d(十四) AssetBundle中的资源提取

如果你觉得这篇文章对你有帮助,可以顺手点个,不但不会喜当爹,还能让更多人能看到它… Unity3d(十四) AssetBundle中的资源提取

分类: 未分类 标签:

[置顶] Cocos开发VR菜鸟宝典 第六讲:操控设备的接入

2016年6月20日 没有评论

火云开发课堂开讲啦!

Cocos开发VR菜鸟宝典

        

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

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

第六章:操控设备的接入



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

[置顶]        Cocos开发VR菜鸟宝典 第六讲:操控设备的接入

[置顶]        Cocos开发VR菜鸟宝典 第六讲:操控设备的接入

[置顶]        Cocos开发VR菜鸟宝典 第六讲:操控设备的接入

[置顶]        Cocos开发VR菜鸟宝典 第六讲:操控设备的接入

[置顶]        Cocos开发VR菜鸟宝典 第六讲:操控设备的接入

[置顶]        Cocos开发VR菜鸟宝典 第六讲:操控设备的接入

[置顶]        Cocos开发VR菜鸟宝典 第六讲:操控设备的接入

[置顶]        Cocos开发VR菜鸟宝典 第六讲:操控设备的接入

[置顶]        Cocos开发VR菜鸟宝典 第六讲:操控设备的接入








分类: 未分类 标签:

Unity3d开发(十三)导出NavMesh可行走区域信息

2016年6月17日 没有评论
Unity3d开发(十三)导出NavMesh可行走区域信息



有时我们会需要Unity3d的地图信息,比如A*之类的逻辑运算。当这些操作要放到服务器上进行时,就需要地图信息。通常项目中的行走区域是使用Navmesh制作的。这篇文章中,介绍如何将Navmesh的信息导出成bitmap。

脚本效果

整个工具的设置界面放到Inspector中,由于是程序同学用,所以界面就比较糙,对付用吧Unity3d开发(十三)导出NavMesh可行走区域信息 可以设置几个数值,导出地图的左顶点坐标、地图精度、宽、高,设置界面如下图所示:

Unity3d开发(十三)导出NavMesh可行走区域信息

设置好后点击Export按钮,即可在场景中计算出可行走区域:

Unity3d开发(十三)导出NavMesh可行走区域信息

可以看到,与Navmesh的可行走区域相对应位置会画出绿色标尺线,不能行走则标为红色。最终导出的信息内容如下:

startpos=(-6.0, 0.0, 6.0)
height=15
wide=15
accuracy=1
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},
{0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,},
{0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,},
{0,0,1,1,1,1,0,0,0,0,1,0,0,0,0,},
{0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,},
{0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,},
{0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,},
{0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,},
{0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,},
{0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},

核心原理

使用一个Unity3d中Navmesh的接口:

NavMesh.SamplePosition

来检测一个点是否在可行走区域中。同时将内容输出到日志中。检测时增加了不同高度的采样,防止由于斜坡引起的遗漏。

代码实现

using UnityEngine;
using System.Collections;
using System.Text;
using UnityEditor;

public class NavExport : MonoBehaviour
{
    #region Public Attributes
    public Vector3 leftUpStart = Vector3.zero;
    public float accuracy = 1;
    public int height = 30;
    public int wide = 30;
    #endregion

    #region Unity Messages

    void OnGUI()
    {
        if (GUILayout.Button("Export"))
        {
            exportPoint(leftUpStart, height, wide, accuracy);
        }
    }

    #endregion

    #region Public Methods

    public void Exp()
    {
        exportPoint(leftUpStart, wide, height, accuracy);
    }

    public void exportPoint(Vector3 startPos, int x, int y, float accuracy)
    {
        StringBuilder str = new StringBuilder();
        int[,] list = new int[x, y];
        str.Append("startpos=").Append(startPos).Append("/r/n");
        str.Append("height=").Append(y).Append("/r/nwide=").Append(x).Append("/r/naccuracy=").Append(accuracy).Append("/r/n");
        for (int i = 0; i < y; ++i)
        {
            str.Append("{");
            for (int j = 0; j < x; ++j)
            {
                int res = list[j, i];
                NavMeshHit hit;
                for (int k = -10; k < 30; ++k)
                {
                    if (NavMesh.SamplePosition(startPos + new Vector3(j * accuracy, k, -i * accuracy), out hit, 0.2f, NavMesh.AllAreas))
                    {
                        res = 1;
                        break;
                    }
                }
                Debug.DrawRay(startPos + new Vector3(j * accuracy, 0, -i * accuracy), Vector3.up, res == 1 ? Color.green : Color.red, 5);
                str.Append(res).Append(",");
            }
            str.Append("},/n");
        }
        Debug.Log(str.ToString());
    }
    #endregion

}

[CustomEditor(typeof(NavExport))]
public class NavExportHelper : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        if (GUILayout.Button("Export"))
        {
            var exp = target as NavExport;
            exp.Exp();
        }
    }
}

如果你觉得这篇文章对你有帮助,可以顺手点个,不但不会喜当爹,还能让更多人能看到它… Unity3d开发(十三)导出NavMesh可行走区域信息

分类: 未分类 标签:

Swift下自定义xib添加到Storyboard

2016年6月13日 没有评论

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

我们使用Storyboard布局的时候,很多子单元页面会独立到xib布局中,那么这个xib如何添加到storyboard中呢?下面我们看看Swift下怎么操作。


一、准备工作

  1. 新建Xcode工程
  2. 新建一个UIView:MyView.swift 集成自UIView
  3. 新建一个UIView的xib布局文件:MyView.xib
    这个是我MyView.xib内容:
    Swift下自定义xib添加到Storyboard

二、互相关联MyView.xib与MyView.swift

xib关联到MyView.swift

  1. 设置MyView.xib的File’s Owner 的Custom Class为MyView
  2. 注意:不要修改MyView.xib下View的Custom Class,保存其为默认的UIView。
    Swift下自定义xib添加到Storyboard

MyView.swift设置

  1. 将MyView.xib下的View拖拽到MyView.swift中关联IBOutlet属性变量:view
    @IBOutlet var view: UIView!
  1. 添加初始化代码在MyView.swift中:
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        // app 运行后从storyboard加载
        NSBundle.mainBundle().loadNibNamed(
            String(MyView),
            owner: self,
            options: nil
            )[0] as! UIView
        self.addSubview(view)
        view.frame = self.bounds

        self.setup()
    }

    func setup() {
        // init code ...
    }

三、添加MyView.xib到Main.storyboard

  1. 拖拽一个UIView到Main.storyboard中,设置该UIView的Custom Class为MyView, 添加一下布局约束。
    Swift下自定义xib添加到Storyboard

OK, 现在运行Xcode,是不是看到app运行后,自己的xib已经出来了。


四、让Xcode下Main.storyboard中预览xib

细心的朋友注意到了,Main.storyboard中没有刷新xib视图,只能运行后才能看到,下面我们让Main.storyboard中也能预览xib。
1. 添加@IBDesignable属性
2. 添加Main.storyboard下xib初始化方法
3. 注意:
– Xcode非运行状态下storyboard加载xib使用NSBundle.mainBundle().loadNibNamed会出现找不到xib文件的错误。
– xib加载后,需要设置其frame大小,不然frame会是xib中的大小。
– 每次选中storyboard,都会自动Build一次来刷新其中xib视图,如果过程中出现错误信息可以直接Xcode下查看,如果出现Crash错误,Xcode下不会显示,此时去查看下面的crash文件来帮助你定位问题。

~/Library/Logs/DiagnosticReports/IBDesignablesxxxxxxx.crash

下面是完整MyView.swift

import UIKit

@IBDesignable class MyView: UIView {

    @IBOutlet var view: UIView!

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        // app 运行后从storyboard加载
        NSBundle.mainBundle().loadNibNamed(
            String(MyView),
            owner: self,
            options: nil
            )[0] as! UIView
        self.addSubview(view)
        view.frame = self.bounds

        self.setup()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)

        // Xcode中storyboard预览加载
        NSBundle(forClass: MyView.self).loadNibNamed(
            String(MyView),
            owner: self,
            options: nil
            )[0] as! UIView
        self.addSubview(view)
        view.frame = self.bounds

        self.setup()
    }

    func setup() {
        // init code ...
    }

    @IBAction func tapped(sender: AnyObject) {
        print("tappd")
    }
}

效果图:
Swift下自定义xib添加到Storyboard

分类: 未分类 标签:

[置顶] Cocos开发VR菜鸟宝典 第五讲:分屏显示原理深入讲解

2016年6月2日 没有评论

火云开发课堂开讲啦!

Cocos开发VR菜鸟宝典

        

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

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

第五章:分屏显示原理深入讲解



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

[置顶]        Cocos开发VR菜鸟宝典 第五讲:分屏显示原理深入讲解

[置顶]        Cocos开发VR菜鸟宝典 第五讲:分屏显示原理深入讲解

[置顶]        Cocos开发VR菜鸟宝典 第五讲:分屏显示原理深入讲解

[置顶]        Cocos开发VR菜鸟宝典 第五讲:分屏显示原理深入讲解

[置顶]        Cocos开发VR菜鸟宝典 第五讲:分屏显示原理深入讲解



分类: 未分类 标签:

[置顶] Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 – HelloWorld

2016年6月1日 没有评论


火云开发课堂开讲啦!

Cocos开发VR菜鸟宝典

        

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

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

第四章:第一个VR漫游场景 – Hello World



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

[置顶]        Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 - HelloWorld

[置顶]        Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 - HelloWorld

[置顶]        Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 - HelloWorld

[置顶]        Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 - HelloWorld

[置顶]        Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 - HelloWorld

[置顶]        Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 - HelloWorld

[置顶]        Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 - HelloWorld

[置顶]        Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 - HelloWorld

[置顶]        Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 - HelloWorld

[置顶]        Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 - HelloWorld

[置顶]        Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 - HelloWorld

[置顶]        Cocos开发VR菜鸟宝典 第四讲:第一个VR漫游场景 - HelloWorld

分类: 未分类 标签:

SwiftyiRate中文说明

2016年6月1日 没有评论

SwiftyiRate

SwiftyiRate Swift语言实现的app内评分,简单易用。

  1. 所需环境
  2. 开始使用
  3. 使用方式

所需环境

  • iOS 7.0+
  • Xcode 7

开始使用

CocoaPods (iOS 8+)

你可以使用 Cocoapods 来安装 SwiftyiRate,添加pod

pod 'SwiftyiRate'

Podfile:

platform :ios, '8.0'
use_frameworks!

target 'MyApp' do
    pod 'SwiftyiRate', :git => 'https://github.com/PlayApple/SwiftyiRate.git'
end

使用方式

初始化

Add code in AppDelegate.swift

import SwiftyiRate
override class func initialize () {
    // overriding the default iRate strings
    SwiftyiRate.sharedSwiftyiRate.messageTitle = NSLocalizedString("kMessageTitle", comment: "iRate message title")
    SwiftyiRate.sharedSwiftyiRate.message = NSLocalizedString("kMessage", comment: "iRate message")
    SwiftyiRate.sharedSwiftyiRate.cancelButtonLabel = NSLocalizedString("kCancelButtonLabel", comment: "Decline Button")
    SwiftyiRate.sharedSwiftyiRate.remindButtonLabel = NSLocalizedString("kRemindButtonLabel", comment: "Remind Button")
    SwiftyiRate.sharedSwiftyiRate.rateButtonLabel = NSLocalizedString("kRateButtonLabel", comment: "Rate Button")
}

分类: 未分类 标签: