iOS学习笔记-国际化 | luckymore的学习笔记 

作者:JerryXia | 发表于 , 阅读 (15)
最近在给公司的项目做国际化,不得不说是一件很繁重的工作,因为公司项目使用的xib较多,所以既要考虑代码的国际化也要考虑xib的国际化,同时项目中还要求对权限请求提醒做国际化,种种种种。
网上相关国际化的博文有很多,不过并没有一个全面的针对代码、xib、storyboard以及项目配置整体的一个国际化的介绍,所以这里一口气就全部搬上来了。
代码的国际化给项目添加国际化
创建Localization.strings文件打开 File>New>File,选择Resource中Strings Fils,新建一个Strings文件,并命名为Localizable.strings
新建完Localizable.strings后,接下来把所有需要国际化的字符全部写在这个strings文件中就OK了。举个例子
12345678if (![CLLocationManager locationServicesEnabled]) {    [[[UIAlertView alloc] initWithTitle:@"定位服务未打开"                                me...阅读全文

 iOS学习笔记-从QQ的一个Bug引发的关于导航栏的思考 | luckymore的学习笔记 

作者:JerryXia | 发表于 , 阅读 (17)
Bug的发现一次偶然的机会,发现了QQ的一个Bug。复现过程如下:
在QQ中通过任意途径打开一个pdf或者word文档单击全屏显示滑动返回到一半终止返回(再次回到浏览界面)再次滑动返回,就会观察到这样的场景————导航栏消失不见或者导航栏错位当然,这是一个必现的Bug,而且我也相信类似的操作在很多别的应用中也会引发这个Bug,归根结底,这是iOS在引入了滑动返回后导航栏本身的一个Bug
问题复现为了验证这个问题,我特地用storyboard拖了3个viewController,其实前两个的导航栏设置为不隐藏,第三个导航栏设置为隐藏,并且在viewWillAppear和viewWillDisappear中对导航栏做了处理。最后的实验结果出乎意料!!iOS居然直接屏蔽了从无导航栏滑动返回到有导航栏的操作。我可以从第二个界面滑动返回到第一个界面,但是没有办法从第三个界面滑动返回到第二个界面?
为此!我特地自定义了滑动返回事件,来复现这个问题。源代码见:https://github.com/luckymore0520/NavigationTest
下面我们来构想这样一个场景,应用中大部...阅读全文

 10-Tips-For-Internationalization-and-Localization | luckymore的学习笔记 

作者:JerryXia | 发表于 , 阅读 (19)
关于iOS项目的国际化,之前有写过一篇文章,不过不是很系统,也有不少纰漏,还特地写过一篇填坑文,但是因为太坑了,所以不了了事。这段时间又踩了不少坑,也啃了啃官方的文档,特此整理10条Tip,有一些问题不会经常遇到,有些细节也很容易被忽略,不过大部分应该还是很有用的!如果你之前对iOS的国际化一无所知,推荐看一下这篇文章,很精炼也很完整——《Internationalization Tutorial for iOS [2014 Edition]》
1.使用InfoPlist.string为你的应用名、权限提醒等配置信息做国际化大家都知道,我们使用Localizable.strings文件为代码中的字符串做国际化,但是实际上还有InfoPlist.strings。系统会自动识别InfoPlist.strings来对项目的一些配置信息做国际化,例如:
1234567891011121314151617CFBundleDisplayName 应用名称NSHumanReadableCopyright CopyRightNSCameraUsageDescription 相机权限开启时候弹框的提...阅读全文

 iOS学习笔记-关于Core Foundation | luckymore的学习笔记 

作者:JerryXia | 发表于 , 阅读 (17)
千言万语都是坑!
问题的触发点前段时间看到了一个用swift写的下拉刷新的动画PullToBouncehttps://github.com/entotsu/PullToBounce觉得很酷炫,就想用oc来实现一遍,期间踩了不少坑,也算是发现了swift相对于Objective-C的一些方便之处,其中有一段swift代码是这样的
1234567891011121314151617self.waveLayer.path = self.wavePath(amountX: 0, amountY: 0)var bounce = CAKeyframeAnimation(keyPath: "path")bounce.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)var values = [            self.wavePath(amountX: positionX, amountY: positionY),            self.wavePath(amountX: -(po...阅读全文

 实现一个类似iOS9全局搜索的TableView Section Header效果 | luckymore的学习笔记 

作者:JerryXia | 发表于 , 阅读 (27)
先上图:  
看似简单的一个需求实际上真是折腾了半天 =.=
最终效果
这是系统的搜索界面。。。。那么这个TableView的Section Header有什么特殊之处呢?首先,它是半透明的,其次,当Cell滑动到Header下方的时候Cell的内容并不会因为Header是透明的而显示在Header的下方。正常情况下应该是长这样的:可以看见,的确有点丑,但是实现第一张图中的效果其实说难不难说简单也没那么简单,关键是要利用好一个东西:layer.mask
mask即遮罩,如果对一个UIView的layer设置了mask,所达到的效果就是UIView只显示遮罩非透明部分所覆盖的那部分的内容,其他的地方都会被遮挡。利用mask可以做很多很多炫酷的动画,比如这个动画,不过一样,我们也可以使用mask来实现图1中的效果。
说说思路
假设Header的高度是20px,图中情况需要做特殊处理的Header一定位于UITableView的最顶部,我们所需要做的就是,根据当前UITableView的contentOffSet以及Header的高度,计算出对应的Cell需要隐藏的部分,以此为依...阅读全文