6

我有一个视图,我在 drawRect 中做一些特定的绘图。这些绘图是动态的,并且基于视图的宽度和高度。然后,包含它的视图对其应用旋转变换。然而,这种转换似乎调整了我的视图框架的值,这会影响我在 drawRect 中的绘图。

NSLog(@"之前:%f,%f,%f,%f",button.frame.origin.x,button.frame.origin.y,button.frame.size.width,button.frame.size.height );

    CGAffineTransform currentTransform = button.transform;
    CGAffineTransform transformRotate = CGAffineTransformMakeRotation(degreesToRadians);
    button.transform = transformRotate;

    NSLog(@"after:%f,%f,%f,%f",button.frame.origin.x,button.frame.origin.y,button.frame.size.width,button.frame.size.height);

这是输出:

之前:50.000000,100.000000,150.000000,50.000000 之后:65.849365,47.548096,118.301262,154.903809

这是正确的行为还是我错误地应用了转换?

4

1 回答 1

13

请参阅UIView 的 frame 属性的参考文档;


框架

框架矩形,描述视图在其父视图坐标系中的位置和大小。

@property(nonatomic) CGRect frame

警告

如果变换属性不是恒等变换,则此属性的值未定义,因此应被忽略。


尽管有这个警告,事情还是按预期工作。一旦应用了转换(其他身份),框架通常会生成原始视图的投影矩形。但是话又说回来,如果您真的想了解应用了转换的框架并使用CGRectApplyAffineTransform正确获取它,则不应忽略该警告。

于 2012-05-23T01:19:41.803 回答