4

背景:向きとともにコンテンツの変化をアニメーション化したかったのです。私のコンテンツの位置は、self.view.bounds.

問題:境界に沿ってコンテンツをアニメーション化するには、最後にビューの境界がどうなるかを知る必要があります。ハードコーディングできますが、もっと動的な方法を見つけたいと思っています。

コード:したがって、すべてのアニメーションはwillRotateToInterfaceOrientation次のように行われます。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    //centering the image
    imageView.frame = CGRectMake(self.view.bounds.origin.x + (self.view.bounds.size.width - image.size.width)/2 , self.view.bounds.origin.y + (self.view.bounds.size.height - image.size.height)/2, image.size.width, image.size.height);
    NSLog(@"%d",[[UIDevice currentDevice] orientation]);
    NSLog(@"%f", self.view.bounds.origin.x);
    NSLog(@"%f", self.view.bounds.origin.y);
    NSLog(@"%f", self.view.bounds.size.width);
    NSLog(@"%f", self.view.bounds.size.height);

}

境界は方向変更前です。したがって、これは変換が 180 度の場合にのみ機能します。を使用するdidRotateFromInterfaceOrientationと、アニメーションは向きの変更に表示され、見栄えが悪くなります。

4

3 に答える 3

11

willAnimateRotationToInterfaceOrientation:duration:代わりに使用してください。このメソッドは回転アニメーション ブロック内から呼び出され、この時点ですべての境界が正しく設定されています。ドキュメント。

于 2012-05-02T19:52:39.517 に答える
1

動的にしたい場合は、imageView を初期化するautoresizingMaskときにプロパティを設定して、回転時に imageView のスーパービューのサイズが変更されたときにマージンが自動的にサイズ変更されるようにします...

 imageView = //init imageView
 imageView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
 //addtional config

つまり、フレームを 1 回設定するだけで、imageView は常に中央に留まるように調整されます。

UIView クラス リファレンスhttp://developer.apple.com/library/ios/ipad/#documentation/uikit/reference/uiview_class/uiview/uiview.htmlをチェックして、 autoresizingMask プロパティで他に何ができるかを確認してください

于 2012-05-02T19:52:28.527 に答える
0

私があなたを正しく理解している場合は、CGRectMakeで X/Y 座標と幅/高さを交換するだけで、将来のレイアウトを 90 度変更できます。180度変わるなら今と同じ

CGRectMake(self.view.bounds.origin.y + (self.view.bounds.size.height - image.size.height)/2 , self.view.bounds.origin.x + (self.view.bounds.size.width - image.size.width)/2, image.size.height, image.size.width);
于 2012-05-02T19:52:53.430 に答える