`
文章列表
曾经,iOS开发是不需要考虑屏幕适配问题的,因为只有一种屏幕尺寸。而现在已经有了4种屏幕,4,5,6,6P,因此屏幕适配也成了iOS开发中必须考虑的问题。并且,这4种屏幕的宽高比全部都不一样,所以简单的按比例缩放并不能解决问题。我们最近做的一个APP也处理了屏幕适配,本文简单总结一下 根据屏幕类型判断 我不知道有没有更好的办法,我们的做法是根据设备类型,写一些if...else,或者switch语句 判断机型可以使用screen的height(不能使用width,因为4和5的width是一样的,都是320),也可以使用API里的宏,都差不多。我个人感觉,if...else似乎是不可避免的, ...
直接通过layer的cornerRadius属性,设置圆角,发现在iOS8下显示错误(故意设置了红色边框,看得清楚) 虽然边框是圆角,但是UILabel本身还是直角 在iOS8下,需要这样写: cancelLabel.layer.cornerRadius = 5.f; cancelLabel.layer.borderColor = [UIColor whiteColor].CGColor;// 设置成UILabel的背景色 [cancelLabel.layer setMasksToBounds:YES];// 关键 效果:
执行以下代码的时候: [self dismissViewControllerAnimated:NO completion:nil]; UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];// 用户选择的图片 CropImageViewController *cropViewController = [[CropImageViewController alloc] initWithImage:image andImageScale:1.25]; cropViewController.delegate ...
APP的一个页面用到了自定义的UITableViewCell,由于iOS框架的cell重用机制,遇到了一个BUG,总结一下 现象 自定义的UITableViewCell里有一个UIButton,点击这个button以后,需要改变cell的样式,包括换UILabel字体颜色,禁用该UIButton等。结果发现,点击按钮之后,不仅当前cell的字体颜色变了,还有另外几个cell的字体颜色也跟着变,而且是随机的 原因 后来想到,应该是由于iOS的cell重用机制造成的,原来的代码类似: -(void) onButtonPressed { label.textColor = [UIC ...
虽然iOS8引进了UIActionController,但是由于目前还需要兼容iOS7版本,所以还不能完全放弃UIActionSheet 我们有一个界面用到了自定义的模态对话框。当用户点击某个按钮时,会弹出ActionSheet,然后选择ActionSheet的一项,会弹出一个模态的对话框。基本的思路是用一个透明的view直接add到UIWindow上,类似: -(void) show { [[UIApplication sharedApplication].keyWindow addSubview:self]; timer = [NSTimer scheduledTime ...
从2013年12月入坑至今,差不多做了一年半iOS开发,回顾一下学习的过程 学习iOS开发的几个阶段 首先我觉得,学习一门语言,需要5个步骤: 1、了解语言本身。比如首先需要了解objective-c的特性,以及各种相关的东西。从基础的 ...
今天有事回老家,在动车上把EOC囫囵吞枣看完了,晚上回来摘要几条觉得比较重要的,备忘 1、在可能的时候,尽量多用字面量 2、尽可能为对象实现description方法 3、私有方法的前缀,不用_,会跟苹果冲突。那我考虑用__ 4、如果一个类里的方法太多,考虑用category分类 5、category也要加前缀,比如sd_setImageWithUrl。总之因为oc缺少完备的namespace方案,所以在可能冲突的地方,都要考虑加前缀 6、以弱引用避免retain cycle 7、ARC无法处理CoreFoundation框架的对象回收,需要自己调用CFRelease方法 8、定 ...
hybrid还是native 使用hybrid开发,有几个好处: 1、web程序员参与开发 2、跨平台 3、快速更新 缺点主要是UI体验比不上原生,比如滚动、弹性、拖拽、动画等,web的效果现在还是比不上native。所以实际项目中,选择哪种开发方式,取决于具体的需求 比如说,我们做的一个店务管理的APP,逻辑非常复杂,但是对UI的要求比较低,这就比较适合使用hybrid来做。因为对UI的要求不高,但是业务逻辑如果需要在多个平台实现,开发和测试的工作量都要加倍,另外APP本身是to business的应用,如果有BUG就需要快速更新 而另一个APP,是面向C端用户的,那么对UI的要 ...
最近做的APP,需要分享功能,于是试了一下友盟的社会化组件。总的感觉还不错,虽然没有比直接集成官方SDK简便多少,但是后台统计的功能不错,所以最后还是用了。官网的文档说明已经挺详细了,不过章节组织得有点乱,本文总结一下 获取友盟app key 首先去友盟注册一个app key,然后下载它的SDK。这里要注意的是,SDK分为IDFA版和非IDFA版,前者需要设置一个默认的广告页,否则有可能被苹果拒绝上架,我觉得有点风险,所以最后选的是非IDFA的版本。由于目前IDFA是唯一标识设备的最准确手段,所以这个版本有可能在识别新用户时不如IDFA版准确,不过我觉得可以接受 然后友盟提供了多套组件,除 ...
这几天写一段数据迁移脚本,各种bug和闪退,定位以后发现大部分都是NSDictionary取key引发的错误 判断key存在 第一个场景是判断key是否存在,NSDictionary并没有类似containsKey之类的API,网上找到的判断方法,大部分是 if([dict objectForKey:@"xxx"]){ // key存在 } 如果一个@{}不包含某个key,那么调用objectForKey会返回nil,就走不进if的分支 判断key对应的value非空 但是这里的NSDictionary是用FMDB返回的结果,可能key是存在的,但是对 ...
我们的一个方案是基于文件做多端数据同步,见另外一篇博客:基于文件的数据同步方案 其中的核心是如何正确、高效地同步文件,一开始我们使用了国产的libsync库:libsync 基本的流程是:有文件A和B,现在想把文件A“变成” ...
为了发布苹果企业版ipa,我们在godaddy上申请了SSL证书。部署之后发现,在PC/Mac平台的各浏览器上都可以正常通过https协议访问,但是在iPad的Safari上就会报错 在这个地址:SSL checker,校验后发现,提示以下错误信息: The certificate is not trusted in all web browsers. You may need to install an Intermediate/chain certificate to link it to a trusted root certificate. 看样子是少部署了交叉证书的原 ...
这几天把一段逻辑从服务端搬到客户端,基本上就是把js翻译成oc。直接对比,明显感到oc太烂了(仅针对语言本身,iOS应用框架还凑合) 比如下面这行JS代码: var monthtag = bill_year + "-" + bill_month; 写成OC以后,非常晦涩。当然用NSMutableString能有个append方法,但是恶心程度也差不多: NSString *monthTag = [NSString stringWithFormat:@"%@-%@", [NSString stringWithFormat:@"%d&q ...
有一类系统,基本上所有操作都要求在线。在客户端产生的数据,直接提交到服务器,本地不存数据,或者仅保存少量缓存数据。这类应用有一个优势,就是客户端和服务器的数据始终是同步的,罕有两端不一致的情况。但是也有缺点,即对网络条件要求高,在网络条件不好的时候,用户操作需要等待,甚至无法正常使用 我们的一个APP,与上述系统不同,是支持离线操作的。数据在本地和服务器各有一份,然后通过同步机制来保持一致。这样做的缺点是提升了系统的复杂性,因为如果设计有缺陷,就很容易发生两端数据不一致的情况;另外就是如果客户端长期离线,存在数据丢失的风险。当然好处也很明显,即操作不依赖网络,所以非常流畅。即使在无网络条件下, ...
有一个特性需要调用第三方库libsync,在node.js里可以用ffi来实现 首先稍微包装了一下,ffi也是支持异步调用的,但是API比较麻烦,包装以后调用起来会比较容易 var ffi = require("ffi"); var lib = ffi.Library('./libsync', { 'file_chunk': ['int', ['string', 'string', 'int']], 'file_delta': ['int', ['string', 'string', 'string', 'int']], 'file_sync' ...
Global site tag (gtag.js) - Google Analytics