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