我有一个图像墙(UIScrollView),在那里我有很多UI
ImageView.
这是我的代码:
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.
怎么可能?
当然我想要仅针对单张图像的动画效果.
解决方法
以下是转换在概念上的工作原理:
>系统将fromView的父视图的当前状态呈现为屏幕外缓冲区(“之前”状态)
> fromView从其父视图中删除
> toView被添加到parentView(可以是nil,你是对的;在这种情况下没有添加任何内容)
>系统将父视图渲染到屏幕外缓冲区(“后”状态“)
>系统将父视图从“之前”状态转换为“之后”状态的动画
在您的情况下,父视图是滚动视图,因此整个滚动视图已过渡.与您的感知相反,即使使用交叉溶解也是如此.只是大多数的scrollview(未被fromView覆盖的部分)在之前和之后都是相同的,所以看起来好像那部分没有参与过渡 – 但确实如此.
如果我理解正确,你在滚动视图中水平排列多个图像视图堆栈,并且每当有人双击堆栈中的“最上面”图像视图时,你想要“直接”显示它下面的图像,而不会影响其他堆栈.
如果您为scrollView中的每个堆栈添加一个容器视图,该堆栈与堆栈大小相同,并将此堆栈的所有ImageViews放入此容器视图中而不是直接放入滚动视图中,它将起作用.点按,就像你最初那样从点击视图转换为nil.屏幕上的过渡大小将仅限于容器视图(粗略地说 – 卷曲和翻转使用其框架之外的一些空间).