float scaleFactor = 0.5;
self.bubble.transform = CGAffineTransformMakeScale(scaleFactor, scaleFactor);
[self.bubble setNeedsDisplay];
[UIView animateWithDuration:2.0 animations:^{
self.frame = _rectToMoveTo;
} completion:^(BOOL finished) {
[UIView animateWithDuration:2.0f animations:^{
self.bubble.transform = CGAffineTransformMakeScale(1.0, 1.0);
}];
}];
上面的代码执行动画大多是正确的。如您所见,self.bubble
缩小为½然后动画恢复正常。问题是self.bubble有一个drawRect
方法来绘制圆。问题是这个圆圈从一开始就缩小到1/4!当第二个动画运行时,self.bubble
的子视图会缩放到正常,但圆圈会扩展到只有½。我已经尝试使用setNeedsDisplay
来重绘圆圈,但它只会在动画完成后才能工作,所以这并不好。你怎么解决这个问题?
编辑:这是_bubble drawRect方法。
CGContextRef c = UIGraphicsGetCurrentContext();
if (!_colour) _colour = [UIColor darkGrayColor];
[_colour setFill];
[[UIColor clearColor] setStroke];
CGContextAddEllipseInRect(c, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height));
CGContextFillPath(c);
[self addSubview:_title];
[self addSubview:_icon];
答案 0 :(得分:2)
self.frame
位于superview的坐标系中,因此会受到你不想要的变换的影响。
在drawRect:
内,您应该只使用self.bounds
,而不是self.frame
。
此外,您不应在drawRect:
中添加子视图。