[英]Transition behavior using transitionFromView and transitionWithView
[英]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。
怎么可能?
當然我想要僅針對單個圖像的動畫效果。
以下是轉換在概念上的工作原理:
在您的情況下,父視圖是滾動視圖,因此整個滾動視圖已轉換。 與您的感知相反,即使使用交叉溶解也是如此。 只是大多數的scrollview(未被fromView覆蓋的部分)在之前和之后都是相同的,所以看起來好像那部分沒有參與過渡 - 但確實如此。
如果我理解正確,你在滾動視圖中水平排列多個圖像視圖堆棧,並且每當有人雙擊堆棧中的“最上面”圖像視圖時,你想要“直接”顯示它下面的圖像,而不會影響其他堆棧。
如果為每個與堆棧大小相同的堆棧向scrollView添加容器視圖,並將此堆棧的所有ImageViews放入此容器視圖中而不是直接放入滾動視圖中,它將起作用。 點擊,只需按照您最初的操作從點擊視圖轉換為nil。 屏幕上的過渡大小將僅限於容器視圖(粗略地說 - 卷曲和翻轉使用其框架之外的一些空間)。
根據您的要求,您可能希望在刪除堆棧中的最后一個映像后刪除堆棧的容器視圖。
原因是UIViewAnimationOptionTransitionFlipFromTop
僅在iOS 5.0之后可用
來自UIView類參考 :
UIViewAnimationOptionTransitionFlipFromTop
從頂部到底部圍繞其水平軸翻轉視圖的過渡。 視圖的頂側朝向后側向前側和底側移動。
適用於iOS 5.0及更高版本。
在UIView.h中聲明
因此,在iOS 4.3中,它可能會導致不可預測的行為。
首先,您需要列出一個toView
才能正確使用transitionFromView
。
[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.