在动画中间对 UIImageView 进行动画处理
-
12-12-2019 - |
题
我有一个物体在屏幕上从右向左移动:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:7.8];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
myImageview.layer.position = CGPointMake(20, myImageView.layer.position.y);
[UIView commitAnimations];
我发现即使动画仍在发生,XCode 也已经将图像的位置标记为其最终目的地,并且为了检测移动图像上的触摸,我需要使用presentationLayer:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self.view];
if ([myImageview.layer.presentationLayer hitTest:touchPoint]) {
NSLog(@"it's a hit!");
}
}
这部分有效。现在,我希望图像在按下时向上移动。我希望图像在继续横向移动的同时向上移动。相反,此代码不仅将图像向上移动,而且一直移动到左侧的最终目的地:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self.view];
if ([mouse.layer.presentationLayer hitTest:touchPoint]) {
NSLog(@"it's a hit!");
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
myImageView.layer.position = CGPointMake( mouse.layer.position.x, myImageView.layer.position.y - 40);
[UIView commitAnimations];
}
}
我希望图像在继续横向移动的同时向上移动。有谁知道有什么方法可以实现这一目标?
非常感谢!
解决方案
您是否尝试过设置动画选项 UIViewAnimationOptionBeginFromCurrentState
?
(我说选项是因为它是 iOS 4 引入的基于块的动画方法中的一个选项。它也可以作为 [UIView setAnimationBeginsFromCurrentState:YES]
如果您还无法摆脱已弃用的 UIView 类方法。)
touchesBegan 变成(使用块动画):
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self.view];
if ([mouse.layer.presentationLayer hitTest:touchPoint]) {
NSLog(@"it's a hit!");
[UIView animateWithDuration:0.5 delay:0.0 options:(UIViewAnimationOptionCurveLinear & UIViewAnimationOptionBeginFromCurrentState) animations:^{
myImageView.layer.position = CGPointMake( myImageView.layer.position.x, mouse.layer.position.y - 40);
}completion:^(BOOL complete){
//
}];
}
}
如果你使用它,你应该能够指定最终的 x
和 y
您想要的坐标,并且动画从触摸对象的点开始到该位置。
不隶属于 StackOverflow