簡體   English   中英

transitionFromView:和翻轉的奇怪行為。

[英]transitionFromView: and strange behavior with flip.

我有一個圖像牆( 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只是我的滾動型圖像效果。 當我在這段代碼中使用UIViewAnimationOptionTransitionFlipFromTop這會影響到我的scrollView。

怎么可能?

當然我想要僅針對單個圖像的動畫效果。

以下是轉換在概念上的工作原理:

  1. 系統將fromView的父視圖的當前狀態呈現為屏幕外緩沖區(“之前”狀態)
  2. fromView將從其父視圖中刪除
  3. toView被添加到parentView(可以是nil,你是對的;在這種情況下,沒有添加任何內容)
  4. 系統將父視圖渲染到屏幕外緩沖區(“后”狀態“)
  5. 系統將父視圖從“之前”狀態轉換為“之后”狀態的動畫

在您的情況下,父視圖是滾動視圖,因此整個滾動視圖已轉換。 與您的感知相反,即使使用交叉溶解也是如此。 只是大多數的scrollview(未被fromView覆蓋的部分)在之前和之后都是相同的,所以看起來好像那部分沒有參與過渡 - 但確實如此。

如果我理解正確,你在滾動視圖中水平排列多個圖像視圖堆棧,並且每當有人雙擊堆棧中的“最上面”圖像視圖時,你想要“直接”顯示它下面的圖像,而不會影響其他堆棧。

如果為每個與堆棧大小相同的堆棧向scrollView添加容器視圖,並將此堆棧的所有ImageViews放入此容器視圖中而不是直接放入滾動視圖中,它將起作用。 點擊,只需按照您最初的操作從點擊視圖轉換為nil。 屏幕上的過渡大小將僅限於容器視圖(粗略地說 - 卷曲和翻轉使用其框架之外的一些空間)。

根據您的要求,您可能希望在刪除堆棧中的最后一個映像后刪除堆棧的容器視圖。

原因是UIViewAnimationOptionTransitionFlipFromTop僅在iOS 5.0之后可用

來自UIView類參考

UIViewAnimationOptionTransitionFlipFromTop
從頂部到底部圍繞其水平軸翻轉視圖的過渡。 視圖的頂側朝向后側向前側和底側移動。
適用於iOS 5.0及更高版本。
在UIView.h中聲明

因此,在iOS 4.3中,它可能會導致不可預測的行為。

首先,您需要列出一個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作為參數。

另外,我認為將UImageView添加到容器UIView並在容器上執行操作更好,而不是直接在UIImageView上執行。 因為基本上你需要一個“父”UIView來制作動畫,同時在動畫中添加和刪除子視圖。

正如Cory所說,transitionFromView:toView:看起來像是要有目的地視圖。 如果您只想淡出視圖,為什么不使用一個僅用於單個視圖的方法,例如transitionView:duration:options:animations:completion。

文檔中的示例似乎完全符合您的要求。

[UIView transitionWithView:containerView
       duration:0.2
       options:UIViewAnimationOptionTransitionFlipFromLeft
       animations:^{ [fromView removeFromSuperview]; [containerView addSubview:toView]; }
       completion:NULL];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM