iOS CGAffineTransform简单应用

来源:互联网 发布:linux 搜索文件夹权限 编辑:程序博客网 时间:2024/05/22 03:35

最近用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;}

效果图

0 0