如何在按钮单击 iOS 时为视图设置动画?
How to animate a view on button click iOS?
使用以下代码,我将在单击按钮时显示带有动画的视图。
UIViewController *modalView = self.pageViewController;
[self.view addSubview:modalView.view];
[UIView animateWithDuration:1 animations:^{
CGRect currentRect = modalView.view.frame;
currentRect.origin.y = 650.0f;
currentRect.size.height = 295.0f;
[modalView.view setFrame:currentRect];
[modalView.view removeFromSuperview];
}];
[self.view addSubview:_pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];
第一次点击按钮时效果很好。当我一次又一次地按下按钮时,这不再是动画了。这是第一次制作动画。有什么办法吗?
提前致谢!
原因是 modalView.view 的框架最初与
不同
currentRect.origin.y = 650.0f;
currentRect.size.height = 295.0f;
所以当改变它的帧动画时。
但是下次你执行按钮的动作时modalView.view的当前帧和你设置的那个帧是一样的。所以根本没有什么动画。
此外,您应该将 [modalView.view removeFromSuperview];
从动画块移动到完成块
[UIView animateWithDuration:1 animations:^{
CGRect currentRect = modalView.view.frame;
currentRect.origin.y = 650.0f;
currentRect.size.height = 295.0f;
[modalView.view setFrame:currentRect];}
completion:^(BOOL finished) {
[modalView.view removeFromSuperview];
}];
使用以下代码,我将在单击按钮时显示带有动画的视图。
UIViewController *modalView = self.pageViewController;
[self.view addSubview:modalView.view];
[UIView animateWithDuration:1 animations:^{
CGRect currentRect = modalView.view.frame;
currentRect.origin.y = 650.0f;
currentRect.size.height = 295.0f;
[modalView.view setFrame:currentRect];
[modalView.view removeFromSuperview];
}];
[self.view addSubview:_pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];
第一次点击按钮时效果很好。当我一次又一次地按下按钮时,这不再是动画了。这是第一次制作动画。有什么办法吗?
提前致谢!
原因是 modalView.view 的框架最初与
不同currentRect.origin.y = 650.0f;
currentRect.size.height = 295.0f;
所以当改变它的帧动画时。
但是下次你执行按钮的动作时modalView.view的当前帧和你设置的那个帧是一样的。所以根本没有什么动画。
此外,您应该将 [modalView.view removeFromSuperview];
从动画块移动到完成块
[UIView animateWithDuration:1 animations:^{
CGRect currentRect = modalView.view.frame;
currentRect.origin.y = 650.0f;
currentRect.size.height = 295.0f;
[modalView.view setFrame:currentRect];}
completion:^(BOOL finished) {
[modalView.view removeFromSuperview];
}];