我想在使用附加的UIPanGestureRecognizer拖动的UIView上实现延迟的'放大'动画。 我一直在使用类似于以下代码的东西:
UIView* innerView;
CGPoint startingPoint;
- (void)viewDidLoad {
innerView = [[[UIView alloc] autorelease] initWithFrame:CGRectMake(0, 0, 200, 200)];
[[self view] addSubview:innerView];
[innerView setBackgroundColor:[UIColor blueColor]];
[innerView addGestureRecognizer:[[[UIPanGestureRecognizer alloc] autorelease] initWithTarget:self action:@selector(pan:)]];
// resize it later
[self performSelector:@selector(anim) withObject:nil afterDelay:1.5];
}
-(void)pan:(UIPanGestureRecognizer*)gr {
CGPoint gesturePoint = [gr translationInView:[self view]];
if (gr.state == UIGestureRecognizerStateBegan)
startingPoint = innerView.center;
else
innerView.center = CGPointMake(startingPoint.x + gesturePoint.x, startingPoint.y +gesturePoint.y);
}
-(void)anim{
innerView.layer.transform = CATransform3DMakeScale(1.5, 1.5, 1);
}
但是在应用比例后拖动视图会“跳跃”。这种行为并不总是发生,而是以伪随机方式发生。 任何人都可以阐明这个问题或提出不同的方法吗?
答案 0 :(得分:1)
尝试对视图而不是图层进行转换,以便 -anim 方法如下所示:
-(void)anim
{
[UIView beginAnimations:nil context:NULL];
[innerView setTransform:CGAffineTransformMakeScale(1.5f, 1.5f)];
[UIView commitAnimations];
}
问题是视图的根层默认情况下禁用了动画,因此它只会捕捉到您正在设置的变换。
或者,如果您需要为图层设置动画,则可以使用 CABasicAnimation 来使用显式动画。