gpt4 book ai didi

ios - 在 drawrect 方法中绘制带动画的矩形?

转载 作者:行者123 更新时间:2023-11-29 10:45:28 24 4
gpt4 key购买 nike

我在 drawrect 方法中有以下代码。我想用动画画画。

-(void)drawRect:(CGRect)rect{
CGContextRef context = UIGraphicsGetCurrentContext();

CGMutablePathRef pathRef = CGPathCreateMutable();


CGPathMoveToPoint(pathRef, NULL, a.x, a.y);
CGPathAddLineToPoint(pathRef, NULL, b.x, b.y);
CGPathAddLineToPoint(pathRef, NULL, c.x, c.y);
CGPathAddLineToPoint(pathRef, NULL, d.x, d.y);
CGPathCloseSubpath(pathRef);



CGContextAddPath(context, pathRef);
CGContextStrokePath(context);

CGContextSetBlendMode(context, kCGBlendModeClear);

CGContextAddPath(context, pathRef);
CGContextFillPath(context);

//这里我正在显示动画,但它不起作用。有什么办法可以做到这一点

-(void)showAnimation{
[UIView beginAnimations:@"movement" context:nil];
[UIView setAnimationDelegate:self];
[UIView setAnimationWillStartSelector:@selector(didStart:context:)];
[UIView setAnimationDidStopSelector:@selector(didStop:finished:context:)];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:3.0f];

[UIView setAnimationRepeatAutoreverses:YES];
a=CGPointMake(10, 100);
b=CGPointMake(100, 100);
c=CGPointMake(100, 30);
d=CGPointMake(20, 30);
[UIView commitAnimations];
}
}

最佳答案

也许您正在寻找一个自定义层子类。通过这样做,您可以添加自己的自定义动画属性,例如表示绘图进度的进度变量,并在 drawInContext 中使用。确定绘制内容的方法。

现在,如果您通过 CAAnimation 为该属性设置动画,所发生的一切就是 CoreAnimation 系统复制您的层,将属性稍微更改为最终值,调用 drawInContext ,再次稍微更改属性,调用 drawInContext再次等等。这就是动画的工作原理。

Layer 子类应该如下所示:

#import <QuartzCore/QuartzCore.h>

@interface AnimatedRect : CALayer
@property (nonatomic) float progress;
@end

@implementation AnimatedRect

//the animated property must be dynamic
@dynamic progress;

//initWithLayer is called when the animation starts, for making the copy
- (id)initWithLayer:(id)layer {
self = [super initWithLayer:layer];
if (self) {
self.progress = layer.progress;
}
return self;
}

//drawInContext is called to perform drawing
-(void)drawInContext:(CGContextRef)ctx
{
//your drawing code for the rect up to the percentage in progress
//some math is required here, to determine which sides are drawn
//and where the endpoint is
}

在 drawInContext 方法中,您必须计算最后一条绘制线的结束位置。例如,如果你有一个正方形,12.5% 是第一行的一半,50% 是前两行。下面的矩形在 87.5%,从右上角开始 rect at 87.5%

作为补充:如果你想隐式动画,你需要实现额外的方法-(id<CAAction>)actionForKey:(NSString *)event ,您可以在其中创建一个 CAAnimation 并将其返回。

关于该主题的一个很好的来源是 this tutorial

关于ios - 在 drawrect 方法中绘制带动画的矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22588275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com