标签:calayer ios ios图层 图层动画 uiview
标签(空格分隔): ios进阶
@property(nonatomic,readonly,retain) CALayer *layer;
宽度和高度
@property CGRect bounds;
位置(相对于父控件的坐标系)
@property CGPoint position;
锚点(x,y的范围都是0-1,是相对于自己的坐标系,(1,1)是指的自己的右下角)
@property CGPoint anchorPoint;
背景颜色(CGColorRef类型)
@property CGColorRef backgroundColor;
形变属性
@property CATransform3D transform;
边框颜色(CGColorRef类型)
@property CGColorRef borderColor;
边框宽度
@property CGFloat borderWidth;
圆角半径
@property CGColorRef borderColor;
内容(比如设置为图片CGImageRef)
@property(retain) id contents;
Root Layer
(根层)Root Layer
,也就是手动创建的CALayer对象,都存在着隐式动画非Root Layer
的部分属性进行修改时,默认会自动产生一些动画效果。[CATransaction begin];
[CATransaction setDisableActions:YES];
self.myview.layer.position = CGPointMake(10, 10);
[CATransaction commit];
#pragma mark 暂停CALayer的动画
-(void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
// 让CALayer的时间停止走动
layer.speed = 0.0;
// 让CALayer的时间停留在pausedTime这个时刻
layer.timeOffset = pausedTime;
}
#pragma mark 恢复CALayer的动画
-(void)resumeLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = layer.timeOffset;
// 1. 让CALayer的时间继续行走
layer.speed = 1.0;
// 2. 取消上次记录的停留时刻
layer.timeOffset = 0.0;
// 3. 取消上次设置的时间
layer.beginTime = 0.0;
// 4. 计算暂停的时间(这里也可以用CACurrentMediaTime()-pausedTime)
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
// 5. 设置相对于父坐标系的开始时间(往后退timeSincePause)
layer.beginTime = timeSincePause;
CALayer和UIView都能实现动画效果,但 UIView多了事件处理的功能,所以当需要与用户进行交互的时候就需要用UIView了,如果不需要交互的话,那两者都可以,单CALayer更轻量级,性能会好些
做动画的时候可能会用到
做路径动画的时候可能用到
- 代码示例(描边动画)
- (void)start
{
// 生成形状图层
CAShapeLayer *shapeL = [CAShapeLayer layer];
shapeL.path = self.path.CGPath;
shapeL.strokeColor = [UIColor redColor].CGColor;
// 默认会添加整个路径,如果想要画线,必须清空填充的颜色
shapeL.fillColor = [UIColor clearColor].CGColor;
// // 设置描边的进度
// shapeL.strokeStart = 0;
// shapeL.strokeEnd = 0.5;
[self.layer addSublayer:shapeL];
// 清空绘图
[self.path removeAllPoints];
[self setNeedsDisplay];
CABasicAnimation *anim = [CABasicAnimation animation];
anim.duration = 3;
anim.keyPath = @"strokeEnd";
anim.fromValue = @0;
anim.toValue = @1;
[shapeL addAnimation:anim forKey:nil];
}
@property(copy) NSArray *colors
@property(copy) NSArray *locations
@property CGPoint startPoint
@property CGPoint endPoint
@property(copy) NSString *type
利用CAReplicatorLayer可做很多绚丽的效果,如音乐条,和活动指示器
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:calayer ios ios图层 图层动画 uiview
原文地址:http://blog.csdn.net/maomaopanjiu/article/details/46945167