在drawRect目标C中为CGPath设置动画

时间:2014-06-19 12:28:12

标签: ios objective-c xcode uiview drawrect

任何人都知道如何在UIView的drawRect方法中动画CGPath是一个好主意吗?

例如,从UIView的一端到另一端绘制一条黑线,然后当计时器翻过来时,将每个单独的像素更改为不同的颜色变化以模仿各种颜色的“流动”(想想墨西哥波,但颜色深浅。)

这可行/有效吗?

1 个答案:

答案 0 :(得分:0)

试试这个。

-(void)drawRect:(CGRect)rect{
[UIView animateWithDuration:0.5 animations:^{
    CAShapeLayer *shapeLayer=[CAShapeLayer layer];
shapeLayer.path=[self maskPath].CGPath;
[yourview.layer setMask:shapeLayer];
}

-(UIBezierPath *)maskPath{
UIBezierPath *path=[[UIBezierPath alloc] init];
[path moveToPoint:[self normalizedCGPointInView:yourview ForX:1 Y:1]];
[path addLineToPoint:[self normalizedCGPointInView:yourview ForX:9 Y:1]];
[path addLineToPoint:[self normalizedCGPointInView:yourview ForX:9 Y:9]];
[path addLineToPoint:[self normalizedCGPointInView:yourview ForX:1 Y:9]];

return path;
}

-(CGPoint)normalizedCGPointInView:(UIView *)view ForX:(CGFloat)x Y:(CGFloat)y{
CGFloat normalizedXUnit=view.frame.size.width/10;
CGFloat normalizedYUnit=view.frame.size.height/10;
return CGPointMake(normalizedXUnit*x, normalizedYUnit*y);
}

通过使用归一化坐标方案,计算掩模的BezierPath要容易得多。此外,它意味着蒙版始终相对于视图的大小而不是固定为特定大小。

希望这有帮助!