0

目前,我正在drawRect视图中覆盖,以便能够使用蒙版(使用CGContextClipToMaskinside drawRect)剪辑彩色矩形。有时我会改变这个剪裁矩形的颜色。在这种情况下drawRect,再次调用,用新颜色重绘和剪裁矩形。现在我不想立即更改颜色,而是对此进行动画处理。问题是,在覆盖 drawRect 时不执行动画(drawRect 只被立即调用一次)。

有没有办法执行这个动画,也许是通过子类化视图,所以我仍然drawRect在超类中覆盖,但是动画是通过子类执行的,这样超类中的 drawRect 在动画期间被执行多次?

或者也可以根本不覆盖drawRect,并且仍然能够以某种方式用蒙版剪辑这个矩形? drawRect看起来像这样:

CGContextRef ctx = UIGraphicsGetCurrentContext();
CGImageRef maskImage = [[UIImage imageNamed:maskName] CGImage];
CGContextClipToMask(ctx, rect, maskImage);

CGContextSetFillColorWithColor(ctx, self.currentColor);
CGContextFillRect( ctx, rect );
4

2 回答 2

0

一种解决方案是使用一个计时器,当颜色改变时,它会随着时间的推移重复重绘。当用户选择一种新颜色时,给NSTimer它加注星号,比如每秒 10 次。当计时器触发时,将当前颜色更新为从开始颜色到结束颜色的中途,并使视图无效。达到最终颜色后,终止计时器。

于 2012-02-17T17:03:53.327 回答
0

我认为最好使用 CALayer 来掩盖您的视图(不要忘记导入 QuartzCore):

maskLayer.contents = (id)[UIImage imageNamed:maskName].CGImage; // maskLayer is a CALayer
view.layer.mask = maskLayer;

现在假设您-(void)animate的视图控制器中有一个方法,您已经使用计时器或使用递归调用多次执行它performSelector:withObject:afterDelay

于 2012-02-17T17:23:58.223 回答