8

イメージ ウォール ( UIScrollView) があり、そこには がたくさんありUIImageView'sます。

これが私のコードです:

for (ThumbPosterModel *tPoster in _thumbsPosterStack) {

    UIImageView *imageView = [[UIImageView alloc] initWithImage:tPoster.thumb];
    imageView.userInteractionEnabled = YES;
    imageView.frame = CGRectMake(i, imageView.frame.origin.y, imageView.frame.size.width, imageView.frame.size.height);

    [tPoster setTag:tag];
    [_posterTagArr addObject:(BasicPosterModel*)tPoster];

    imageView.tag = tag;
    tag++;
    [posterWallScrollView addSubview:imageView];

    UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(imageDoubleTapped:)];
    doubleTap.numberOfTapsRequired = 2;
    [imageView addGestureRecognizer:doubleTap];
}

そして、ここに私の IBAction があります:

-(IBAction)imageDoubleTapped:(id)sender {
    NSInteger selectTag = (((UIGestureRecognizer*)sender).view.tag);
    for (BasicPosterModel *bPoster in _posterTagArr) {
        if(bPoster.tag == selectTag) {
            [UIView transitionFromView:(UIImageView*)((UIGestureRecognizer*)sender).view
                                toView:mySecordView //let's say next ImageView. Doesn't matter
                              duration:1.0
                               options:UIViewAnimationOptionTransitionCrossDissolve  
                            completion:^(BOOL finished) {
                                // animation completed
                            }];

        }
    }
}

そして、私が使用するとき:

UIViewAnimationOptionTransitionCrossDissolveこれは、ScrollView の私の画像にのみ影響します。このコードで使用すると、これ UIViewAnimationOptionTransitionFlipFromTopが scrollView に影響します。

それはどのように可能ですか?

もちろん、単一の画像に対してのみアニメーション効果を適用したいと考えています。

4

4 に答える 4

10

移行が概念的にどのように機能するかを次に示します。

  1. システムは、fromView の親ビューの現在の状態をオフスクリーン バッファー (「前」の状態) にレンダリングします。
  2. fromView はその親ビューから削除されます
  3. toView がparentViewに追加されます(nilの可能性があります。その通りです。その場合、何も追加されません)
  4. システムは、親ビューをオフスクリーン バッファーにレンダリングします (「後」状態)。
  5. システムは、「前」の状態から「後」の状態への親ビューの遷移をアニメーション化します

あなたの場合、親ビューはスクロール ビューであるため、スクロール ビュー全体が遷移します。あなたの認識に反して、それはクロス ディゾルブを使用している場合でも当てはまります。スクロールビューの大部分 (fromView でカバーされていない部分) が前後で同一であるため、その部分がトランジションに参加していないように見えますが、参加しています。

私が正しく理解している場合、スクロール ビューで画像ビューの複数のスタックを水平に配置しており、誰かがスタックの「一番上の」画像ビューをダブルタップするたびに、そのすぐ下の画像を「表示」したいと考えています。他のスタック。

スタックと同じサイズのこれらの各スタックの scrollView にコンテナー ビューを追加し、このスタックのすべての ImageView をスクロール ビューに直接ではなく、このコンテナー ビューに配置すると、機能します。タップすると、最初に行ったように、タップされたビューから nil に遷移するだけです。画面上のトランジションのサイズはコンテナ ビューに制限されます (大まかに言えば、カールとフリップはそのフレームを超えるスペースを使用します)。

要件によっては、スタック内の最後のイメージが削除された後で、スタックのコンテナー ビューを削除することが必要になる場合があります。

于 2012-08-14T16:25:23.653 に答える
2

その理由はUIViewAnimationOptionTransitionFlipFromTop、iOS 5.0 以降でしか利用できないためです。

UIViewクラスリファレンスから:

UIViewAnimationOptionTransitionFlipFromTop
水平軸を中心にビューを上から下に反転するトランジション。ビューの上部が前面に移動し、下部が背面に移動します。
iOS 5.0 以降で利用できます。
UIView.h で宣言されています。

そのため、iOS 4.3 では予期しない動作を引き起こす可能性があります。

于 2012-08-16T13:48:43.090 に答える
0

まず、適切toViewに使用するにはリストを作成する必要があります。transitionFromView

これがどのように行われるかのAppleの例です:

[UIView transitionFromView:(displayingPrimary ? primaryView : secondaryView)
        toView:(displayingPrimary ? secondaryView : primaryView)
        duration:1.0
        options:(displayingPrimary ? UIViewAnimationOptionTransitionFlipFromRight :
                    UIViewAnimationOptionTransitionFlipFromLeft)
        completion:^(BOOL finished) {
            if (finished) {
                displayingPrimary = !displayingPrimary;
            }
    }];

またtransitionFromView、引数として superView を取り込むことを想定していると思います。

また、UIImageViewに直接ではなく、UImageView をコンテナー UIView に追加し、コンテナーでアクションを実行することをお勧めします。基本的に、アニメーション中にサブビューを追加および削除する間、アニメーション化するには「親」の UIView が必要になるためです。

于 2012-08-07T17:36:41.070 に答える
-1

Cory が言うように、transitionFromView: toView: は目的のビューを持つことを意図しているように見えます。ビューをフェードアウトするだけの場合は、transitionView:duration:options:animations:completion など、単一のビューでのみ機能することを目的としたメソッドを使用しないでください。

ドキュメントの例は、まさにあなたが望むことをしているように見えます。

[UIView transitionWithView:containerView
       duration:0.2
       options:UIViewAnimationOptionTransitionFlipFromLeft
       animations:^{ [fromView removeFromSuperview]; [containerView addSubview:toView]; }
       completion:NULL];
于 2012-08-14T09:00:27.443 に答える