在drawRect内容上使用CGAffineTransformMakeScale进行iOS缩放

时间:2014-01-11 09:09:32

标签: ios core-graphics scale cgaffinetransform

    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];

1 个答案:

答案 0 :(得分:2)

self.frame位于superview的坐标系中,因此会受到你不想要的变换的影响。

drawRect:内,您应该只使用self.bounds,而不是self.frame

此外,您不应在drawRect:中添加子视图。