1

ユーザーがクリックしたときに画面のサイズに自動的にズームしたい UIView があります。

http://cocoawithlove.com/2010/09/zoomingviewcontroller-to-animate-uiview.htmlからコードを取得しました

ズームが機能しますが、ズームが始まる直前にビューが 90 度回転します。なぜそれが起こっているのですか?

(ビューはカルーセル内にあります。ユーザーがビューをタップする前に、デバイスが横向きに回転し、その時点でカルーセルのビュー コントローラーがナビゲーション スタックにプッシュされ、カルーセルが表示されます。)

コードは次のとおりです。

- (void)buttonTapped:(UIButton *) sender
{
    NSInteger index = [self.carousel indexOfItemView:sender];

    UIView *currentView = [self.carousel itemViewAtIndex: index];
    UIView *proxyView = [[UIView alloc] initWithFrame:currentView.frame];
    proxyView.hidden = YES;
    proxyView.autoresizingMask = currentView.autoresizingMask;
    [currentView.superview addSubview: proxyView];

    CGRect frame = [currentView.window convertRect:currentView.frame fromView:proxyView.superview];
    [currentView.window addSubview:currentView];
    currentView.frame = frame;

    [UIView
     animateWithDuration:2.4
     animations:^{
         currentView.frame = currentView.window.bounds;
     }];

(カルーセルは、 https://github.com/nicklockwood/iCarouselからの UIView 派生オブジェクトです)

ありがとう

4

1 に答える 1

0

問題は次のいずれかだと思います。

currentView.frame = frame;

また:

currentView.frame = currentView.window.bounds;

横向きモードでは、ビューまたはそれを囲むビューの1つに、すべてを90度回転する変換があります。UIViewのドキュメントに示されているように、ビューのプロパティがID変換以外の場合、frameプロパティは未定義です。transformビューを設定すると、frame暗黙的transformにIDに戻り、縦向きに回転して戻る可能性があります。

frame上記のリンク先のドキュメントは、変換が発生したときに変更しないように警告し、解決策を提供します。

このプロパティへの変更はアニメーション化できます。ただし、transformプロパティに非ID変換が含まれている場合、frameプロパティの値は未定義であり、変更しないでください。その場合、centerプロパティを使用してビューの位置を変更し、代わりにboundsプロパティを使用してサイズを調整できます。

于 2012-05-30T14:50:31.680 に答える