- 博客(25)
- 资源 (53)
- 收藏
- 关注
原创 drawRect的绘制的使用(绘制文本字符、绘制图片、绘制图形)
通过重写UIView的drawRect方法进行绘制使用,如绘制文本字符、绘制图片、绘制图形等。注意事项:1、设置frame的属性,或调用setNeedsDisplay时才会调用drawRect方法。2、在绘制过程中(1)针对实际情况获取图形上下文CGContextRef context = UIGraphicsGetCurrentContext();(2)有时候,还需要在获取图
2017-02-27 16:08:19 21305
原创 CALayer绘制图片
CALayer渲染内容图层。与UIImageView相比,不具有事件响应功能,且UIImageView是管理内容。注意事项:如何使用delegate对象执行代理方法进行绘制,切记需要将delegate设置为nil,否则会导致异常crash。 CALayer绘制图片与线条效果图:代码示例: CGPoint position = CGPointMake(160.0, 20...
2017-02-21 18:20:10 3055
原创 CATextLayer绘制文本字符串
CATextLayer使用Core Text进行绘制,渲染速度比使用Web Kit的UILable快很多。而且UILable主要是管理内容,而CATextLayer则是绘制内容。CATextLayer的绘制文本字符串的效果如下:代码示例: // 绘制文本的图层CATextLayer *layerText = [[CATextLayer alloc] init];//...
2017-02-21 17:43:38 3681 2
原创 僵尸对象导致crash(Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT))
APP运行过种中闪退,没有打印出任何提示信息,全局断点All Exceptions也没有起作用,而是直接进入main函数,并显示信息"Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)"。如下图所示:出现这种情况的闪退,通常是由于调用了一个已经被释放掉的、不存在的僵尸对象。查找和解决僵尸对象的方法如下:1、在scheme中打开对象跟踪的属性
2017-02-21 15:30:49 29187
原创 2017年移动App的开发趋势
转载地址:http://mobile.51cto.com/android-529999.htm智能手机和移动app的使用在2017年也不会减少。只是移动app的趋势可能会展现一些新的色彩。智能手机已经成为我们日常生活不可分割的一部分。早上用闹钟起床,使用Whatsapp,听音乐,阅读新闻,观看YouTube视频,检查邮件,更新项目状态等等——一切都可以在我们的移动设备上无缝执行。目前,
2017-02-19 00:19:13 4979
原创 NSAttributedString/NSMutableAttributedString富文本的使用(NSMutableParagraphStyle)
图文混排使用时,可以使用类NSAttributedString,或NSMutableAttributedString进行字符串的创建和相关属性的设置。其中字符串属性的设置,包括设置文本段落排版格式NSMutableParagraphStyle,也包括文本属性。代码示例// 文本段落排版格式NSMutableParagraphStyle *textStyle = [[NSMutab
2017-02-17 16:48:16 1840
原创 CADisplayLink 和 NSTimer 的差异
CADisplayLink 和 NSTimer 的差异。NSTimer 其实就是 CFRunLoopTimerRef。一个 NSTimer 注册到 RunLoop 后,RunLoop 会为其重复的时间点注册好事件。RunLoop为了节省资源,并不会在非常准确的时间点回调这个Timer。Timer 有个属性叫做 Tolerance (宽容度),标示了当时间点到后,容许有多少最
2017-02-17 11:12:07 585
原创 为什么必须在主线程中操作UI
因为UIKit不是线程安全的。如果不在主线程中操作UI,可能会造成如下的情况:(1)两个线程同时设置同一个背景图片,那么很有可能因为当前图片被释放了两次而导致应用崩溃。(2)两个线程同时设置同一个UIView的背景颜色,那么很有可能渲染显示的是颜色A,而此时在UIView逻辑树上的背景颜色属性为B。(3)两个线程同时操作view的树形结构:在线程A中for循环遍历并操作当前View
2017-02-17 10:57:32 1651
原创 自定义动态数量图片显示视图(UIImageView)
效果图代码示例注意:1、计算x坐标的变化,换行时的特别处理。每行的第一个x坐标都是相同的,即取模计算余数为0时,则重置每行的第一个x坐标为固定值。2、计算y坐标的变化,不存在换行的处理。3、图片显示子视图处理完成后,注意父视图大小的设置。// 父视图self.bgView = [[UIView alloc] initWithFrame:CGRectMake(10.
2017-02-16 09:52:16 764
原创 性能优化Instruments-Allocations工具使用
性能优化中使用Instruments-Allocations工具进行内存分配使用监测。内存爆增,且持续不释放的情况,除了是内存泄露外,还有就是对性能代码质量不过关导致。通常造成内存爆增的情况主要有:(1)不断的创建UI视图,主要体现在对列表视图的使用(UITableView,UICollectionView);(2)不断的进行数据运算,特别是大数据的运算;(3)图片处理;(
2017-02-14 17:08:53 4226
原创 性能优化Instruments-Leaks工具使用
性能优化中使用Instruments的Leaks工具进行内存泄露的检测。内存泄露,即内存被分配及使用过后,即使不再使用的该内存,也一直未被释放,从而造成无法被其他对象使用。在ARC内存管理模式下,产生内存泄露的的情况如下:(1)动画效果产生的无限循环(2)多个对象间的相互强引用 (3)定时器NSTimer的使用(4)代码块block的强引用解决方法:(1)在视图控制
2017-02-14 16:44:09 3751
原创 性能优化检测Instruments-time profile的使用
使用Instruments中的time profile工具进行运行时间的耗时检测。打开Instruments(注意:需要先打开要检测的项目文件,然后Xcode的菜单栏中选择打开Instruments)方法1:方法2:选择time profile工具,并打开运行查看(注意:选项配置)查看源码
2017-02-14 15:50:51 6456
原创 性能优化-UITableView的优化使用
TableView的性能优化1、使用reuseIdentifier来重用cells2、尽量使所有的view opaque,包括cell自身3、缓存行高4、减少subviews的数量,同时使用drawRect进行绘制5、如果cell内现实的内容来自web,使用异步加载,缓存请求结果6、避免渐变,图片缩放,后台选人7、使用shadowPath来画阴影8、尽量不使
2017-02-13 17:13:17 1946
原创 内存优化autoreleasepool的使用
在ARC内存管理模式下,使用 autoreleasepool 主要来避免频繁申请/释放内存,从页达到优化内存的效果。根据 Apple的文档(https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html),使用
2017-02-13 14:56:20 587
原创 main方法之前的加载时间衡量
通过设置scheme中的环境变量属性"DYLD_PRINT_STATISTICS"值为"1"实现调用main方法之前的加载时间统计。打印信息
2017-02-09 18:03:15 390
原创 弹簧动画效果
github:https://github.com/potato512/SYAnimation使用CASpringAnimation实现弹簧动画效果。效果图:代码示例:- (void)springAnimation{ UIView *view = [[UIView alloc] initWithFrame:CGRectMake(120.0, 1
2017-02-08 17:15:33 976
原创 水纹波浪效果动画
github:https://github.com/potato512/SYAnimation效果图:示例代码见"github:https://github.com/potato512/SYAnimation"中的"SYWaterAnimationView"类。使用:// 使用方法1SYWaterAnimationView *waterView = [
2017-02-08 16:29:58 3313
原创 椭圆线条绘制动画
github:https://github.com/potato512/SYAnimation使用贝赛尔曲线UIBezierPath、阴影对象CAShapeLayer、基础类动画CABasicAnimation实现。效果图如下:示例代码:- (void)lineAnimation{ UIView *view = [[UIView alloc]
2017-02-08 16:26:10 930
原创 火焰动画
github:https://github.com/potato512/SYAnimation使用发射对象CAEmitterLayer、发射单元CAEmitterCell对象创建火焰动画效果。效果图如下:代码示例:+ (void)animationFireWithImage:(NSString *)imageName view:(UIView *)view frame:(C
2017-02-08 16:22:43 492
转载 iOS ffmpeg获取视频关键帧
av_register_all(); if(av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)!=0) { printf("error!\n"); } if(av_find_stream_info(pFormatCtx)<0) { printf("error!\n"
2017-02-07 16:35:46 1809
转载 AudioServicesPlaySystemSound音频服务—IOS开发
对于简单的、无混音音频,AVAudio ToolBox框架提供了一个简单的C语言风格的音频服务。你可以使用AudioservicesPlaySystemSound函数来播放简单的声音。要遵守以下几个规则:1、音频长度小于30秒2、格式只能是PCM或者IMA43、文件必须被存储为.caf、.aif、或者.wav格式4、简单音频不能从内存播放,而只能是磁盘文件除了对简单音频
2017-02-07 16:29:55 1217
转载 iOS AVAudioPlayer音频播放器
iOS中有三种播放音频的方式:AVAudioPlayer、音频服务、音频队列。此文主要讲AVAudioPlayer,其他两个请见相关文章。AVAudioPlayer在AVFoundation框架下,所以我们要导入AVFoundation.framework。AVAudioPlayer类封装了播放单个声音的能力。播放器可以用NSURL或者NSData来初始化,要注意的是NSURL并不
2017-02-07 16:26:59 2127
转载 iOS音频
1、关于音效 音效又称短音频,是一个声音文件,在应用程序中起到点缀效果,用于提升应用程序的整体用户体验。我们手机里常见的APP几乎都少不了音效的点缀。显示实现音效并不复杂,但对我们App很重要! 2、音效播放 2.1、首先实现我们需要导入框架AudioTool
2017-02-07 16:10:59 372
转载 iOS iPhone操作队列 VS Java线程池
引言在涉及多线程并发操作时,如何管理多线程对共享数据的访问以及防止线程间的死锁问题是个很重要的话题。在 Java 语言中,从Java 5 开始, Java 提供了自己的线程池 ThreadPoolExecutor 类;在 iPhone 中则提供了 NSOperationQueue 类进行多线程的管理和调度。 什么是线程池?线程池到底是怎么一回事呢?其实线程池的原理很
2017-02-07 16:05:47 688
Demolimit输入限制
2016-02-15
DemoKVO_KVC
2014-09-03
Notification
2014-07-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人