iOS CGAffineTransform简单应用

最近用CGAffineTransform和手势做了一个简单的联系,不足的地方希望大家多多指点,在此先谢过大家了。

struct CGAffineTransform {
CGFloat a, b, c, d;
CGFloat tx, ty;
};
a:表示水平方向的缩放
d:表示垂直方向的缩放
tx:表示水平方向的位移
ty:表示垂直方向的位移
b和c不为0,肯定发生旋转

    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 200, 150)];
    imageView.image = [UIImage imageNamed:@"image"];
    [self.view addSubview:imageView];    
    //全参数设置
    //CGAffineTransform transform = CGAffineTransformMake(0.1, 0.5, 0.1, 0.1, 30, 30);
    //imageView.transform = transform;

    //设置image的偏移量
    //CGAffineTransform transform = CGAffineTransformTranslate(imageView.transform, 30, 150);
    //imageView.transform = transform;

    //设置image的缩放比例
    //CGAffineTransform transform = CGAffineTransformScale(imageView.transform, 0.8, 0.8);
    //imageView.transform = transform;

    //设置image的旋转角度
    //CGAffineTransform transform = CGAffineTransformMakeRotation(1);
    //imageView.transform = transform;
    //同上,区别在于可根据其他transform进行旋转
    //imageView.transform = CGAffineTransformRotate(imageView.transform, 0.5);

下面是练习

    创建底层view
    bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.width)];
    bgView.backgroundColor = [self randomColor:0];
    bgView.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2);
    bgView.alpha = 1;
    [self.view addSubview:bgView];
    创建效果视图
    //旋转角度可与M_PI结合使用
    NSMutableArray *array = [[NSMutableArray alloc]init];
    CGFloat angle = M_PI*2/12;
    for (int i = 0; i < 12; i++) {
        UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];
        view.center = CGPointMake(bgView.frame.size.width/2, bgView.frame.size.width/2);
        view.layer.cornerRadius = 25.0;
        view.backgroundColor = [self randomColor:1];
        [array addObject:view];
    }

    for (int i = 0; i < array.count; i++) {
        UIView *view = [array objectAtIndex:i];
        [bgView addSubview:view];
        dispatch_async(dispatch_get_main_queue(), ^{
            [UIView animateWithDuration:0.5 animations:^{
                view.layer.anchorPoint = CGPointMake(3, 1);
                view.transform = CGAffineTransformMakeRotation(angle * i);
            }];
        });
    }

    //创建拖动手势
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panEvent:)];
    pan.delegate = self;
    [bgView addGestureRecognizer:pan];

    //创建向右轻扫手势
    UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeEvent:)];
    swipeRight.delegate = self;
    //设置轻扫手势识别器的方向
    swipeRight.direction = UISwipeGestureRecognizerDirectionRight;
    [self.view addGestureRecognizer:swipeRight];

    //创建向左轻扫手势
    UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeEvent:)];
    swipeLeft.delegate = self;
    //设置轻扫手势识别器的方向
    swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft;
    [self.view addGestureRecognizer:swipeLeft];

    //创建向下轻扫手势
    UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeEvent:)];
    swipeDown.delegate = self;
    //设置轻扫手势识别器的方向
    swipeDown.direction = UISwipeGestureRecognizerDirectionDown;
    [self.view addGestureRecognizer:swipeDown];

    //创建向上轻扫手势
    UISwipeGestureRecognizer *swipeUp = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeEvent:)];
    swipeUp.delegate = self;
    //设置轻扫手势识别器的方向
    swipeUp.direction = UISwipeGestureRecognizerDirectionUp;
    [self.view addGestureRecognizer:swipeUp];
//拖拽手势事件
-(void)panEvent:(UIPanGestureRecognizer *)sender
{
    if (sender.state == UIGestureRecognizerStateChanged) {
        if ([identifier isEqualToString:@"s"]) {
            bgView.transform = CGAffineTransformRotate(bgView.transform, 0.08);
        }else if ([identifier isEqualToString:@"n"]){
            bgView.transform = CGAffineTransformRotate(bgView.transform, -0.08);
        }
    }else if (sender.state == UIGestureRecognizerStateEnded){
        identifier = @"none";
    }
}
//轻扫手势事件
-(void)swipeEvent:(UISwipeGestureRecognizer *)sender
{
    CGPoint offSetPoint1 = [sender locationInView:self.view];
    if ([identifier isEqualToString:@"none"]) {
        if (sender.direction == UISwipeGestureRecognizerDirectionUp) {
            if (offSetPoint1.x > self.view.frame.size.width/2) {
                NSLog(@"向上右");
                identifier = @"n";
            }else{
                NSLog(@"向上左");
                identifier = @"s";
            }
        }else if (sender.direction == UISwipeGestureRecognizerDirectionDown){
            if (offSetPoint1.x > self.view.frame.size.width/2) {
                NSLog(@"向下右");
                identifier = @"s";
            }else{
                NSLog(@"向下左");
                identifier = @"n";
            }
        }else if (sender.direction == UISwipeGestureRecognizerDirectionLeft){
            if (offSetPoint1.y > self.view.frame.size.height/2) {
                NSLog(@"向左下");
                identifier = @"s";
            }else{
                NSLog(@"向左上");
                identifier = @"n";
            }
        }else if (sender.direction == UISwipeGestureRecognizerDirectionRight){
            if (offSetPoint1.y > self.view.frame.size.height/2) {
                NSLog(@"向右下");
                identifier = @"n";
            }else{
                NSLog(@"向右上");
                identifier = @"s";
            }
        }
    }
}
//响应多个手势执行以下代理
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}

效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值