总结
这个项目已经做完很长一段时间了,总结也是很久之前写的。现在放上来
页面
绿点闪烁动画
使用CABasicAnimation来实现
使用类方法来创建动画
+ (instancetype)animationWithKeyPath:(NSString *)path;
制定动画的layer起始值和目标值
// 指定执行动画layer的起始值
@property(nullable, strong) id fromValue;
// 指定结束动画layer的结束值
@property(nullable, strong) id toValue;
// 指定执行动画的时候的相对值
@property(nullable, strong) id byValue;
常用属性
/* 基础动画的时间间隔 默认为0.25*/
@property CFTimeInterval duration;
/* 设置为YES的时候,当动画时间间隔过了后,动画就会移除*/
@property(getter=isRemovedOnCompletion) BOOL removedOnCompletion;
/* 当动画时间间隔后,指定动画对象的表现。
* 本地时间可能在时间间隔后或者是元素从当前表现层移除后被压缩
* 合法的值有kCAFillModeForwards、kCAFillModeBackwards
* kCAFillModeBoth kCAFillModeRemoved*/
@property(copy) NSString *fillMode;
闪烁动画主要改变view的opacity
定时器改变文本动画
文字做循环动态效果,用定时器CADisplayLink 定时改变文本。
//将定时器作为属性
@property (nonatomic, strong) CADisplayLink *displayLink;
//启动定时器
self.displayLink = [CADisplayLink displayLinkWithTarget:[YYWeakProxy proxyWithTarget:self] selector:@selector(handleDisplayLink)];
//这里用YYWeakProxy避免循环引用
//设置 动画间隔
self.displayLink.frameInterval = 60.0 // 一秒刷新一次
//加入runloop
[self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
自动换行文本处理
1.在约束了宽度的情况下,不设置preferredMaxLayoutWidth且numberOfLine = 0;
UILable 高度正常, 宽度显示按照约束的宽度大小。
2.在没有约束宽度的情况下,设置preferredMaxLayoutWidth,UILable高度正常,宽度按照preferredMaxWidth宽度显示。
3.同时设置 preferrredMaxLayoutWidth 和 约束宽度(能计算出的)
preferredMaxLayoutWidth < 约束的宽度时, 计算出的行高大约实际高度
preferredMaxLayoutWidth > 约束的宽度是,计算出的行高小于实际高度
如果UILable的高度约束没有设置,则UILabel的高度计算是有preferredMaxLayoutWidth计算来决定的,但是并不影响控件的实际宽度.
ps:为了防止高度被preferredMaxLayoutWidth随意改变,一般不要同时设置preferrredMaxLayoutWidth 和 约束宽度。