无法再次翻转图层,CALayer,CATransform3DRotate。

时间:2013-04-09 04:09:42

标签: ios objective-c calayer catransform3drotate

我要做的是:

  1. 单击按钮进行垂直翻转。
  2. 再次单击按钮,图层将向后翻转,依此类推......
  3. 代码如下:

        @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度,当我再次点击按钮时,没有任何事情发生。

    我错过了中间的东西吗?请帮忙。

1 个答案:

答案 0 :(得分:1)

以下代码仅获取发件人的选定状态。而国家只设置一次。检查下面修改后的代码。

// 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;
    }