我想在水平轴上旋转UIView达360度,然后刷新视图中的内容。我一直在寻找解决方案。在那里找到了一对夫妇。这就是我的结果。
[UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{
self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0);
} completion:^(BOOL finished){
NSLog(@"Finished first pi");
[UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{
self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0);
} completion:^(BOOL finished) {
NSLog(@"Finished second pi");
}];
}];
这会翻转视图,但只能翻转180度。我希望它再翻一次,以便我能正常看到这个视图..
我的NSLog都会一个接一个地显示出来。我相信我在这里遗漏了一些东西。任何帮助都会有所帮助..
由于
答案 0 :(得分:9)
在完成块中尝试将新变换与当前变换连接。
self.tableView.layer.transform = CATransform3DConcat(self.tableView.layer.transform, CATransform3DMakeRotation(M_PI,1.0,0.0,0.0));
答案 1 :(得分:2)
您应该检查此答案How to make a CATransform3dMakeRotation rotate the other way? And chain together
我认为您的问题与以下内容有关:“当您直接使用变换时,Core Animation会将变换从当前值插入指定的变换。它将找到获得该变换的最短路径,将限制动画方向。如果您尝试将相同的转换属性设置为两次动画,则第二个值将简单地覆盖第一个,而不是将两个转换组合在一起。“
答案 2 :(得分:1)
使用它: -
rotatingView.layer.anchorPoint = CGPointMake(0.0f, 0.0f);
rotatingView.center = CGPointMake(0,
(rotatingView.center.y -
(rotatingView.bounds.size.height/2.0f)));
rotatingView.center = CGPointMake(0,
(rotatingView.center.y-
(rotatingView.bounds.size.height/2)));
// start the Page Open
[UIView beginAnimations:@"Animation" context:nil];
[UIView setAnimationDuration:13.0];
// set angle as per requirement
[rotatingView.layer setValue:[NSNumber numberWithInt:280]
forKeyPath:@"transform.rotation.x"];
[UIView commitAnimations];
答案 3 :(得分:0)
您只需在完成块内将代码从1.0更改为0.0,并且完成所有操作。
[UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{
self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0);
} completion:^(BOOL finished){
NSLog(@"Finished first pi");
[UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{
self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,0.0,0.0,0.0);
} completion:^(BOOL finished) {
NSLog(@"Finished second pi");
}];
}];
答案 4 :(得分:0)
您还可以使用.Repeat
和.Autoreverse
动画选项+设置动画的重复计数来解决此问题。这是Swift中的一个例子:
UIView.animateWithDuration(time, delay: 0, options: [.Repeat, .Autoreverse], animations: {
UIView.setAnimationRepeatCount(3)
self.view.layer.transform = CATransform3DMakeRotation(CGFloat(M_PI), 1, 0, 0)
}) { (completed) in
// completion
}