我有一个图片墙(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中的图片有效 ONLY 。
当我在此代码UIViewAnimationOptionTransitionFlipFromTop
中使用时,这会影响我的scrollView。
怎么可能?
当然,我想将动画效果仅用于单张图像。
答案 0 :(得分:10)
以下是过渡在概念上的运作方式:
在您的情况下,父视图是滚动视图,因此整个滚动视图已转换。与您的感知相反,即使使用交叉溶解也是如此。只是大多数的scrollview(未被fromView覆盖的部分)在之前和之后都是相同的,所以看起来好像那部分没有参与过渡 - 但确实如此。
如果我理解正确,你在滚动视图中水平排列多个图像视图堆栈,每当有人双击堆叠中的“最上面”图像视图时,你想要“显示”它正下方的图像,而不影响其他堆栈。
如果为每个与堆栈大小相同的堆栈向scrollView添加容器视图,并将此堆栈的所有ImageViews放入此容器视图中而不是直接放入滚动视图中,它将起作用。点击,只需按照您最初的操作从点击视图转换为nil。屏幕上的过渡尺寸将仅限于容器视图(粗略地说 - 卷曲和翻转使用其框架之外的一些空间)。
根据您的要求,您可能希望在删除堆栈中的最后一个图像后删除堆栈的容器视图。
答案 1 :(得分:2)
原因是UIViewAnimationOptionTransitionFlipFromTop
仅在iOS 5.0
UIViewAnimationOptionTransitionFlipFromTop
从顶部到底部围绕其水平轴翻转视图的过渡。视图的顶侧朝向后方向前侧和底侧移动 适用于iOS 5.0及更高版本。
在UIView.h中声明。
因此,在iOS 4.3中,它可能会导致不可预测的行为。
答案 2 :(得分:0)
首先,您需要列出toView
才能正确使用transitionFromView
。
以下是Apple's example如何完成的工作:
[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来制作动画,同时在动画中添加和删除子视图。
答案 3 :(得分:-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];