动画按钮

来源:互联网 发布:淘宝商城毛线店 编辑:程序博客网 时间:2024/05/06 06:55

动画按钮

by 伍雪颖



github

- (void)awakeFromNib {
   
self.lineColor= [UIColorwhiteColor];
   
self.lineHeight= 2.0;
   
self.lineSpacing= 8.0;
   
self.lineWidth= 30.0;
    [
selfupdateAppearance];
}

- (
void)updateAppearance {
   
CGFloat x = CGRectGetWidth(self.bounds) / 2.0;
   
CGFloat heightDiff =self.lineHeight+ self.lineSpacing;
   
CGFloat y = CGRectGetHeight(self.bounds) / 2.0- heightDiff;
   
   
_topLayer = [selfcreateLayer];
   
_topLayer.position= CGPointMake(x , y);
    y += heightDiff;
   
   
_middleLayer = [selfcreateLayer];
   
_middleLayer.position= CGPointMake(x , y);
    y += heightDiff;
   
   
_bottomLayer = [selfcreateLayer];
   
_bottomLayer.position= CGPointMake(x , y);
    [
selftransformToState:_currentState];
}

- (
void)transformToState:(AnimationButtonState)state {
   
_currentState = state;
   
CATransform3D transform;
   
switch (state) {
       
case AnimationButtonStateCross:{
            transform =
CATransform3DMakeTranslation(0.0,_middleLayer.position.y-_topLayer.position.y,0.0);
           
_topLayer.transform= CATransform3DRotate(transform,M_PI_4,0.0,0.0,1.0);
           
_middleLayer.transform= CATransform3DMakeScale(0.,0.,0.);
            transform =
CATransform3DMakeTranslation(0.0,_middleLayer.position.y-_bottomLayer.position.y,0.0);
           
_bottomLayer.transform= CATransform3DRotate(transform, -M_PI_4,0.0,0.0,1.0);
        }
break;
       
default:{
           
_topLayer.transform= CATransform3DIdentity;
           
_middleLayer.transform= CATransform3DIdentity;
           
_bottomLayer.transform= CATransform3DIdentity;
        }
break;
    }
}

- (
CAShapeLayer*)createLayer {
   
CAShapeLayer *layer = [CAShapeLayernew];
   
UIBezierPath *path = [UIBezierPathnew];
    [path
moveToPoint:CGPointMake(0,0)];
    [path
addLineToPoint:CGPointMake(self.lineWidth,0)];
   
    layer.
path= path.CGPath;
    layer.
lineWidth= self.lineHeight;
    layer.
strokeColor= self.lineColor.CGColor;
    layer.
lineCap= @"round";
   
   
CGPathRef bound = CGPathCreateCopyByStrokingPath(layer.path,
                                                    
nil,
                                                     layer.
lineWidth,
                                                    
kCGLineCapButt,
                                                    
kCGLineJoinMiter,
                                                     layer.
miterLimit);
    layer.
bounds= CGPathGetBoundingBox(bound);
   
CGPathRelease(bound);
    [
self.layeraddSublayer:layer];
   
return layer;
}

1 0