无法再次翻转图层,CALayer,CATransform3DRotate。
问题描述:
我想做的是:
- 单击botton进行垂直翻转。
- 再次单击botton,图层将其翻转回去,依此类推...
代码如下:
@interface ViewController (){
CALayer *plane;
}
@end
@implementation ViewController
-(void)viewDidLoad
{
[super viewDidLoad];
[self addALayer];
}
- (void)addALayer{
plane = [CALayer layer];
plane.backgroundColor = [[UIColor orangeColor] CGColor];
//[plane insertSublayer:normalBackground atIndex:0];
plane.opacity = 1;
plane.frame = CGRectMake(0, 0, 300, 100);
plane.position = CGPointMake(250, 150);
plane.anchorPoint = CGPointMake(0.5, 0.5);
plane.borderColor = [UIColor whiteColor].CGColor;
plane.borderWidth = 3;
plane.cornerRadius = 10;
[self.view.layer addSublayer:plane];
}
- (IBAction)click:(id)sender {
BOOL isClicked = ((UIButton*)sender).selected;
((UIButton*)sender).selected = !((UIButton*)sender).selected;
CATransform3D transfrom = CATransform3DIdentity;
transfrom.m34 = -1.0/ 500;
if ( !isClicked )
transfrom = CATransform3DRotate(transfrom, degToRad(180.0), 1, 0, 0);
else
transfrom = CATransform3DRotate(transfrom, degToRad(-180.0), 1, 0, 0);
plane.transform = transfrom;
}
但是,在第1步中,我可以看到图层翻转了180度我再次单击该按钮,没有任何反应。
However, at step 1, I can see the layer flip 180 degree and when I click the button again, there is nothing happening.
我是否错过了中间的东西?
Did I miss something in the middle? Please help.
答
下面的代码仅获取发件人的选定状态。并且状态仅设置一次。检查下面的修改后的代码。
The code below gets the sender's selected state only. And the state is only set once. Check the modified code below.
// Have a global variable
BOOL isClicked
- (IBAction)click:(id)sender {
CATransform3D transfrom = CATransform3DIdentity;
transfrom.m34 = -1.0/ 500;
if ( !isClicked ) {
transfrom = CATransform3DRotate(transfrom, degToRad(180.0), 1, 0, 0);
isClicked = true;
}
else{
transfrom = CATransform3DRotate(transfrom, degToRad(360.0), 1, 0, 0); // OR CAN ALSO BE 0
isClicked = false;
}
plane.transform = transfrom;
}