zoukankan      html  css  js  c++  java
  • iOS 图形图像动画 Core Animation

    //Core Animation
    
    #define WeakSelf __weak __typeof(self) weakSelf = self
    #define StrongSelf __strong __typeof(weakSelf) self = weakSelf
    
    
    //添加
    - (void)add:(id)sender {
        [UIView animateWithDuration:1 animations:^{
            [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
            [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
        }];
    }
    //翻页
    - (void)curl:(id)sender {
        
        WeakSelf;
        [UIView animateWithDuration:1 animations:^{
            StrongSelf;
            [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
            [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
            [self.view exchangeSubviewAtIndex:3 withSubviewAtIndex:2];
        }];
    }
    //移入
    - (void)move:(id)sender {
        CATransition *trans = [CATransition animation];
        trans.duration = 2.0f;
        trans.type = kCATransitionMoveIn;
        trans.subtype = kCATransitionFromLeft;
        [self.view.layer addAnimation:trans forKey:@"animation"];
        [self.view exchangeSubviewAtIndex:2 withSubviewAtIndex:3];
    }
    //揭开
    - (void)reveal:(id)sender {
        CATransition *trans = [CATransition animation];
        trans.duration = 2.0f;
        trans.type = kCATransitionReveal;
        trans.subtype = kCATransitionFromTop;
        [self.view.layer addAnimation:trans forKey:@"animation"];
        [self.view exchangeSubviewAtIndex:2 withSubviewAtIndex:3];
    }
    //立方体
    - (void)cube:(id)sender {
        CATransition *trans = [CATransition animation];
        trans.duration = 2.0f;
        trans.type = @"cube";
        trans.subtype = kCATransitionFromLeft;
        [self.view.layer addAnimation:trans forKey:@"animation"];
        [self.view exchangeSubviewAtIndex:2 withSubviewAtIndex:3];
    }
    //收缩
    - (void)suck:(id)sender {
        CATransition *trans = [CATransition animation];
        trans.duration = 2.0f;
        trans.type = @"suckEffect";
        [self.view.layer addAnimation:trans forKey:@"animation"];
        [self.view exchangeSubviewAtIndex:2 withSubviewAtIndex:3];
    }
    //翻转
    - (void)oglFlip:(id)sender {
        CATransition *trans = [CATransition animation];
        trans.duration = 2.0f;
        trans.type = @"oglFlip";
        trans.subtype = kCATransitionFromBottom;
        [self.view.layer addAnimation:trans forKey:@"animation"];
        [self.view exchangeSubviewAtIndex:2 withSubviewAtIndex:3];
    }
    //水波
    - (void)ripple:(id)sender {
        CATransition *trans = [CATransition animation];
        trans.duration = 2.0f;
        trans.type = @"rippleEffect";
        [self.view.layer addAnimation:trans forKey:@"animation"];
        [self.view exchangeSubviewAtIndex:2 withSubviewAtIndex:3];
    }

    draw default shape

        CGContextRef ctx = UIGraphicsGetCurrentContext();
        CGContextSetLineWidth(ctx, 16);
        CGContextSetRGBStrokeColor(ctx, 0, 1, 0, 1);
        
        //straight line
        const CGPoint points1[] = {CGPointMake(10, 20),CGPointMake(100, 20),CGPointMake(100, 20),CGPointMake(20, 50)};
        CGContextStrokeLineSegments(ctx, points1, 4);
        
        CGContextSetLineCap(ctx, kCGLineCapSquare);
        const CGPoint points2[] = {CGPointMake(110, 20),CGPointMake(200, 20),CGPointMake(200, 20),CGPointMake(120, 50)};
        CGContextStrokeLineSegments(ctx, points2, 4);
        
        CGContextSetLineCap(ctx, kCGLineCapRound);
        const CGPoint points3[] = {CGPointMake(210, 20),CGPointMake(300, 20),CGPointMake(300, 20),CGPointMake(220, 50)};
        CGContextStrokeLineSegments(ctx, points3, 4);
        
        //dashed line
        CGContextSetLineCap(ctx, kCGLineCapButt);
        CGContextSetLineWidth(ctx, 10);
        CGFloat patterns1[] = {6,10};
        CGContextSetLineDash(ctx, 0, patterns1, 1);
        
        const CGPoint points4[] = {CGPointMake(40, 65),CGPointMake(280, 65)};
        CGContextStrokeLineSegments(ctx, points4, 2);
        
        CGContextSetLineDash(ctx, 3, patterns1, 1);
        const CGPoint points5[] = {CGPointMake(40, 85),CGPointMake(280, 85)};
        CGContextStrokeLineSegments(ctx, points5, 2);
        
        CGFloat patterns2[] = {5,1,4,1,3,1,2,1,1,1,1,2,1,3,1,4,1,5};
        CGContextSetLineDash(ctx, 0, patterns2, 18);
        const CGPoint points6[] = {CGPointMake( 40, 105),CGPointMake(280, 105)};
        CGContextStrokeLineSegments(ctx, points6, 2);
        
        //rectangle
        CGContextSetStrokeColorWithColor(ctx, [UIColor blueColor].CGColor);
        CGContextSetFillColorWithColor(ctx, [UIColor blueColor].CGColor);
        CGContextSetLineWidth(ctx, 14);
        CGContextSetLineDash(ctx, 0, 0, 0);//cancel dashed style
        CGContextStrokeRect(ctx, CGRectMake(30, 230, 120, 60));
        
        CGContextSetStrokeColorWithColor(ctx, [UIColor purpleColor].CGColor);
        CGContextSetLineJoin(ctx, kCGLineJoinRound);//round corner
        CGContextStrokeRect(ctx, CGRectMake(80, 260, 120, 60));
        
        CGContextSetRGBStrokeColor(ctx, 1.0, 0, 1.0, 1);
        CGContextSetLineJoin(ctx, kCGLineJoinBevel);//cliped corner
        CGContextStrokeRect(ctx, CGRectMake(130, 290,120, 60));
        
        CGContextSetFillColorWithColor(ctx, [UIColor redColor].CGColor);//filled rectangle
        CGContextFillRect(ctx, CGRectMake(30,120, 120, 60));
        
        //oval
        CGContextSetRGBStrokeColor(ctx, 0, 1, 1, 1);
        CGContextStrokeEllipseInRect(ctx, CGRectMake(30, 380, 120, 60));//Stroke oval
        
        CGContextSetRGBFillColor(ctx, 1, 0, 1, 1);
        CGContextFillEllipseInRect(ctx, CGRectMake(180, 380, 120, 60));//Filled oval

    draw custom shape

    CGContextRef ctx = UIGraphicsGetCurrentContext();//get context
        for (int i = 0; i < 10; i++) {
            CGContextBeginPath(ctx);
            CGContextAddArc(ctx, i * 35, i * 35, (i + 1) * 6, 0 , 1.5 * M_PI, 0);//actually 0 means clockwise
            CGContextClosePath(ctx);
            CGContextSetRGBFillColor(ctx, 1, 0, 1, (10 - i) * 0.1);
            CGContextFillPath(ctx);
        }

    draw round rect

        CGContextRef ctx = UIGraphicsGetCurrentContext();//get context
        
        CGContextBeginPath(ctx);
        
        CGFloat x,y,radius,width,height;
        x = 50; y = 50; radius = 10; width = 90; height = 40;
        CGContextMoveToPoint(ctx, x + radius, y);//move to left top corner
        CGContextAddLineToPoint(ctx, x + width - radius, y);//add top line to right top corner
        CGContextAddArcToPoint(ctx, x + width, y, x + width, y + radius, radius);//add right top corner
        CGContextAddLineToPoint(ctx, x + width, y + height - radius);//add right line to right bottom corner
        CGContextAddArcToPoint(ctx, x + width, y + height, x + width - radius, y + height, radius);//add right bottom corner
        CGContextAddLineToPoint(ctx, x + radius, y + height);//add bottom line to left bottom corner
        CGContextAddArcToPoint(ctx, x, y + height, x, y + height - radius, radius);//add left bottom corner
        CGContextAddLineToPoint(ctx, x, y + radius);//add left line to left top corner
        CGContextAddArcToPoint(ctx, x, y, x + radius, y, radius);//add left top corner
        
        CGContextClosePath(ctx);
        CGContextSetRGBFillColor(ctx, 1, 0, 1, 0.6);
        CGContextFillPath(ctx);

    draw nCorner star

    CGContextRef ctx = UIGraphicsGetCurrentContext();//get context
        
        CGContextBeginPath(ctx);
        
        CGFloat x,y,size;
        NSInteger nCorner = 5;//n corner
        x = 150; y = 350; size = 50;
        CGFloat dig = 4 * M_PI / nCorner;CGContextMoveToPoint(ctx, x, y + size);
        for (int i = 1; i <= nCorner; i++) {
            CGFloat _x = sin(i * dig);
            CGFloat _y = cos(i * dig);
            CGContextAddLineToPoint(ctx, _x * size + x, _y * size + y);
        }
        
        CGContextClosePath(ctx);
        CGContextSetRGBFillColor(ctx, 1, 0, 1, 0.6);
        CGContextFillPath(ctx);

    draw flower

    CGContextRef ctx = UIGraphicsGetCurrentContext();
        
        CGContextBeginPath(ctx);
        
        CGFloat x,y,size,length;
        NSInteger nCorner = 6;//n corner
        x = 150; y = 350; size = 30; length = 120;//length should be bigger
        CGContextMoveToPoint(ctx, x, y + size);
        CGFloat dig = 2 * M_PI / nCorner;
        for (int i = 1; i < nCorner + 1; i++) {
            //count control point
            CGFloat ctrlX = sin((i - 0.5) * dig) * length + x;
            CGFloat ctrlY = cos((i - 0.5) * dig) * length + y;
            
            //count end point
            CGFloat _x = sin(i * dig) * size + x;
            CGFloat _y = cos(i * dig) * size + y;
            //draw line
            CGContextAddQuadCurveToPoint(ctx, ctrlX, ctrlY, _x, _y);
        }
        CGContextClosePath(ctx);
        CGContextSetRGBFillColor(ctx, 1, 0, 1, 0.6);
        CGContextFillPath(ctx);

    use coordinate

    CGContextRef ctx = UIGraphicsGetCurrentContext();
        
        CGContextTranslateCTM(ctx, 10, 200);//move the coordinate
        for (int i = 0; i < 50; i++) {
            CGContextSetRGBFillColor(ctx, 1, 0, 1, 0.3 - i * 0.01);
            CGContextFillRect(ctx, CGRectMake(0, 0, 150, 75));
            CGContextTranslateCTM(ctx, 50, 50);
            CGContextScaleCTM(ctx, 0.93, 0.93);
            CGContextRotateCTM(ctx, - M_PI / 10);
            
        }
  • 相关阅读:
    Centos7 keepalived 修改日志路径
    mysql 双主复制 centos7
    CentOs 7 安装mysql5.7.18(二进制版本)
    oracle、mysql新增字段,字段存在则不处理
    mysql+ibatis 批量插入
    oracle+ibatis 批量插入-支持序列自增
    oracle 批量插入-支持序列自增
    sftp上传
    java
    mysql
  • 原文地址:https://www.cnblogs.com/ficow/p/5393427.html
Copyright © 2011-2022 走看看