【问题标题】:animate CGPath in drawRect objective C在drawRect目标C中动画CGPath
【发布时间】:2014-08-09 23:50:36
【问题描述】:

有人知道如何/如果在 UIView 的 drawRect 方法中为 CGPath 设置动画是个好主意吗?

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

这可行/有效吗?

【问题讨论】:

  • 我认为是的,它是可行的,检查一些类似 stackoverflow.com/questions/10869509/… 的东西 CAAnimationUIBezierPath 的组合。
  • 应该很简单。一种方法是使用 CAShapeLayer 将其路径设置为 UIBezierPath,然后您可以使用 CABasicAnimation 设置 strokeStart 和 StrokeEnd

标签: ios objective-c xcode uiview drawrect


【解决方案1】:

试试这个。

-(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 会容易得多。此外,这意味着遮罩始终与您的视图大小相关,而不是固定为特定大小。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多