2013-05-27 4 views
5

私は90度に回転すると高さと幅が入れ替わるUIViewを持っています。さて、高さや幅を増やそうとすると、私は異常な外観になります。回転したUIViewの高さを変更するにはどうすればよいですか?フレームを変更せずにUIViewを回転

+0

私はちょうどそれが画面に表示される道の角度を変更する方法が必要です。 –

+5

'view.transform = CGAffineTransformMakeRotation(M_PI/2);' –

+1

90度は一例です。私は手動でビューを回転しています。高さと幅は変化しています。私は画面上のビューの角度を変更する必要があります。 –

答えて

8

アップルのドキュメントでは、ビューのtransformがID変換でない場合、ビューのframeプロパティが未定義になると記載されています。

ビューを回転すると、ビューの変換が変更されます。

これでフレームが無効になるのはなぜですか? Appleのドキュメンテーションは実際にはあまり正確ではありません。フレームプロパティは、変換されたビューでは完全に無意味にならないわけではありません。代わりに、ビューの境界矩形、つまり変換されたビューが収まる最小の直立矩形が反映されます。

これは、実際にはframeが派生プロパティであるためです。変換されたビューの "実際の高さ"、つまり変換が適用される前の座標系の高さを変更したい場合、そのプロパティはboundsです。

ので、一言で言えば:メソッド次

CGRect bounds = myView.bounds; 
bounds.size.height = newHeight; 
myView.bounds = bounds; 
+0

私は自分のコードでこれらの行を入力すると、CGAffineTransformMakeRotation部?その後、または前に? –

+0

おい、あなたは私の一日を作った。ああ、ありがとう、仲間。 –

+0

ありがとうございます。お役に立てて嬉しいです!レコードのために(私はあなたがこれを今までに分かっているはずだと確信しています):境界を変更している場合、前または後の変換を変更しているかどうかは関係ありません。フレームを変更している場合は、 'CGAffineTransformIsIdentity(myView.transform)'がYES(つまり変換を変更する前)の間にのみこれを行うようにしてください。 フレーム対バウンドに関する詳細については、このブログの記事(私ではない)をチェックしてください:http://ashfurrow.com/blog/you-probably-dont-understand-frames-and-bounds – fzwo

1

使用...

- (void) runSpinAnimationOnView:(UIView*)view duration:(CGFloat)duration rotations:(CGFloat)rotations repeat:(float)repeat; 
{ 
    CABasicAnimation* rotationAnimation; 
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ]; 
    rotationAnimation.duration = duration; 
    rotationAnimation.cumulative = YES; 
    rotationAnimation.repeatCount = repeat; 

    [view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 
} 
関連する問題