6

drawRect で特定の描画を行っているビューがあります。これらの描画は動的で、ビューの幅と高さに基づいています。次に、それを含むビューが回転変換を適用します。ただし、この変換はビューのフレームの値を調整するようで、drawRect での描画に影響を与えます。

NSLog(@"before:%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 のフレーム プロパティに関するリファレンス ドキュメントを参照してください。


フレーム

スーパービューの座標系でのビューの位置とサイズを表すフレーム四角形。

@property(nonatomic) CGRect frame

警告

transform プロパティが恒等変換でない場合、このプロパティの値は定義されていないため、無視する必要があります。


その警告にもかかわらず、物事は意図したとおりに機能します。変換 (同一性以外) が適用されると、フレームは通常、元のビューの投影長方形になります。ただし、変換が適用されたフレームを本当に知りたい場合は、その警告を無視しないでください。CGRectApplyAffineTransformを使用して適切に取得します。

于 2012-05-23T01:19:41.803 に答える