我有一个适用于 iPad 的选项卡式应用程序。在第一个选项卡上,我有一个单独的菜单,带有一个突出显示当前活动菜单按钮的指针。点击按钮后,指针(一个 UIImage)动画就位。
问题是,当您将突出显示的图像留在任何不是原始/默认按钮的按钮上并移至应用程序中的另一个选项卡,然后再返回时,图像已移回默认位置。但是,当您点击另一个按钮时,图像会朝错误的方向移动。我认为这是因为图像向后移动但保留了旧坐标,还是相反?与直接在 iPad 上进行测试相比,在模拟器中进行测试时有点碰碰运气,并且表现不同。
我想我需要从绝对坐标开始,并在整个过程中坚持下去。但是我无法理解如何使用 CGAffine 函数来实现它。
这是我当前的代码
- (IBAction)diplayForm1:(id)sender {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
buttonHighlightImage.transform = CGAffineTransformMakeTranslation(0, 0);
[UIView commitAnimations];
}
- (IBAction)diplayForm2:(id)sender {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
buttonHighlightImage.transform = CGAffineTransformMakeTranslation(0, 80);
[UIView commitAnimations];
}
- (IBAction)diplayForm3:(id)sender {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
buttonHighlightImage.transform = CGAffineTransformMakeTranslation(0, 160);
[UIView commitAnimations];
}
编辑 - - -
@Mundi 我尝试了您建议的代码。我假设 newFrame 你的意思是定义一个新的 UIImageView 和我在 .h 中所做的属性(我称之为“sfh”),然后在 .m 中定义 @synthesize。
这是我在 .m 中的代码
-(void)viewWillAppear:(BOOL)animated {
// The "pointer" and the "old" frame are the same so I thought it pointless to do
// selectedFormHighlight.frame = selectedFormHighlight.frame;
// I tried anyway and also tried this and many other combinations
selectedFormHighlight.frame = sfh.frame;
}
-(void)viewDidAppear:(BOOL)animated {
[UIView beginAnimations:nil context:NULL];
[UIView animateWithDuration:0.3 animations:^{
selectedFormHighlight.frame = CGRectMake(0,0,0,0);
}];
[UIView commitAnimations];
}
当我运行它时,指针动画离开屏幕(左上角)并且不会回来。我已经尝试了在 viewWillAppear 和 viewDidAppear 中我能想到的所有可能的组合,但这并没有什么区别。我尝试删除 viewDidAppear 中的其他行,它仍然做同样的事情。
我认为您建议在用户从另一个屏幕返回时从原始(默认)位置为指针设置动画。我不希望这样,它应该简单地留在他们没有动画的地方。或者至少在他们没有意识到的情况下把它放回原处。唯一的动画是当他们选择点击该视图中的不同按钮时。