目前我在视图中覆盖drawRect
,以便能够使用蒙版剪辑彩色矩形(在CGContextClipToMask
内使用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 );
答案 0 :(得分:0)
一种解决方案是使用一个计时器,只要颜色发生变化,就会随着时间的推移重复重绘。当用户选择一种新颜色时,将一个NSTimer
标记为发射,例如每秒10次。当计时器触发时,将当前颜色更新为从开始到结束颜色的中途,并使视图无效。达到最终颜色后,杀死计时器。
答案 1 :(得分:0)
我认为最好使用CALayer来掩盖你的视图(不要忘记导入QuartzCore):
maskLayer.contents = (id)[UIImage imageNamed:maskName].CGImage; // maskLayer is a CALayer
view.layer.mask = maskLayer;
现在假设您的视图控制器中有一个方法-(void)animate
,您可以使用计时器或使用performSelector:withObject:afterDelay
的递归调用多次执行它。