我有UIScrollView
。我想用它做一些动画,但我想添加一个整洁的小动画,它基本上将UIScrollView
缩放回它开始的位置然后我可以做一些UIView
动画。这可能吗?
我尝试使用按钮触发scrollView.zoomToRect
的一个方法,此方法调用后台线程中执行UIView
动画的另一个方法。问题在于,无论我做什么,如果我之后有动画,UIScrollView
将不会缩小到正常状态。我只想让它缩小,然后是一些动画,但我不能。
在动画块中插入scrollView.zoomToRect
方法无效。
有人有想法吗?
答案 0 :(得分:0)
我不确定这是否有资格作为我自己问题的答案,但万一其他人在想,或者万一其他人有更好的解决方案。我使用了以下代码:
(当我按下翻页按钮时调用)
- (void) flipCurrentViewZoomOut {
// If either view is zoomed in
if (view1.scrollView.zoomScale != 1 || view2.scrollView.zoomScale != 1 ) {
if (view1IsVisible == YES) {
[view1.scrollView zoomToRect:[UIScreen mainScreen].bounds animated:YES];
} else {
[bview2.scrollView zoomToRect:[UIScreen mainScreen].bounds animated:YES];
}
[UIView beginAnimations:nil context:nil];
// The duration is enough time for the zoom-out to happen before the second animation methods gets called (flipCurrentView).
[UIView setAnimationDuration:0.4];
[UIView setAnimationDelegate:self];
// When done, then do the actual flipping of the views (exchange subviews, etc.)
[UIView setAnimationDidStopSelector:@selector(flipCurrentView)];
// In order for the zoomToRect to run at all, I need to do some animation, so I basically just move the view 0.01 which is not noticable (and it's animating a flip right after anyway)
if (view1IsVisible == YES) {
view1.frame = CGRectMake(-0.01, 0, 320, 480);
} else {
view2.frame = CGRectMake(-0.01, 0, 320, 480);
}
[UIView commitAnimations];
} else {
// If either view hasn't been zoomed, the flip animation is called immediately
[self flipCurrentView];
}
}
需要注意的一点是,在我的flipCurrentView
方法(翻转视图的第二种动画方法)中,我将view1
和view2
的帧重置为{{1} (在这种情况下,这是我需要的界限)。我必须这样做,否则上面粘贴的动画代码将不会再次运行,因为[UIScreen mainScreen].bounds
将为-0.01并且它无法从-0.01动画到-0.01,所以它会有只是跳过那个动画块。
如果我做了一些完全错误的事情并且有更好的方法可以让我知道。总是乐于学习:)