iOS开发UI篇—transframe属性(形变)
iOS开发UI篇—transframe属性(形变)
1. transform属性
在OC中,通过transform属性可以修改对象的平移、缩放比例和旋转角度
常用的创建transform结构体方法分两大类
(1) 创建“基于控件初始位置”的形变
CGAffineTransformMakeTranslation(平移)
CGAffineTransformMakeScale(缩放)
CGAffineTransformMakeRotation(旋转)
(2) 创建“基于transform参数”的形变
CGAffineTransformTranslate
CGAffineTransformScale
CGAffineTransformRotate
//UIImageView
UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image.png"]];imageView.frame = CGRectMake(20, 100, self.view.frame.size.width-40 ,self.view.frame.size.width-40);
[self.view addSubview:imageView];
//设置交互
imageView.userInteractionEnabled = YES;
// //添加轻拍手势
// UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGRAction:)];
//
// //在图片上添加手势
// [imageView addGestureRecognizer:tapGR];
//
// //设置双击
// tapGR.numberOfTapsRequired = 2;
//
//
// //添加旋转手势
// UIRotationGestureRecognizer *rotationGR = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationGRAction:)];
// [imageView addGestureRecognizer:rotationGR];
//
//
//
// //添加缩放手势
// UIPinchGestureRecognizer *pinchGR = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchGRAction:)];
//
// [imageView addGestureRecognizer:pinchGR];
//
//
//
// //添加长按手势
// UILongPressGestureRecognizer *longGR = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longGRAction:)];
// [imageView addGestureRecognizer:longGR];
//
// //添加平移手势
// UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panGRAction:)];
// //将手势添加到图片上
// [imageView addGestureRecognizer:panGR];
//添加清扫手势
// UISwipeGestureRecognizer *swipeGR = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeGRAction:)];
//
// //设置清扫方向
// swipeGR.direction = UISwipeGestureRecognizerDirectionLeft;//向左
//
// //设置需要几根手指触碰
// swipeGR.numberOfTouchesRequired = 2;
//
// [imageView addGestureRecognizer:swipeGR];
//在屏幕边缘清扫手势(iOS7中新增的功能)
UIScreenEdgePanGestureRecognizer *screenEdgeGR = [[UIScreenEdgePanGestureRecognizer alloc]initWithTarget:self action:@selector(screenEdgeGRAction:)];
//设置屏幕边缘方向
screenEdgeGR.edges = UIRectEdgeLeft;
[imageView addGestureRecognizer:screenEdgeGR];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//轻拍事件
-(void)tapGRAction:(UITapGestureRecognizer *)sender{
NSLog(@"kfdoeosoew");
}
//旋转事件
-(void)rotationGRAction:(UIRotationGestureRecognizer *)sender
{
//获取旋转的坐标
NSLog(@"%f",sender.rotation);
NSLog(@"%@",sender.view);
//通过手势,获取到作用的视图
UIImageView *image = (UIImageView *)sender.view;
//永远从初始位置旋转
image.transform = CGAffineTransformMakeRotation(sender.rotation);
//从image.transform的位置旋转多少弧度
image.transform = CGAffineTransformRotate(image.transform,sender.rotation);
//旋转完成,将值设置为0(重置角度,因为在这个方法在旋转时会被调用)
sender.rotation = 0;
}
//缩放事件
-(void)pinchGRAction:(UIPinchGestureRecognizer *)sender
{
//通过手势,获取到作用的视图
UIImageView *image = (UIImageView *)sender.view;
//设置image的位置
//image.transform = CGAffineTransformMakeScale(3,1);
image.transform = CGAffineTransformScale(image.transform, sender.scale, sender.scale);
//每次设置缩放倍数为原来的倍数
sender.scale = 1;
}
//长按事件
-(void)longGRAction:(UILongPressGestureRecognizer *)sender
{
// //通过手势,获得到作用的视图
// UIImageView *image = (UIImageView *)sender.view;
//
//最少持续按压的秒数和允许活动的范围
NSLog(@"%lf",sender.minimumPressDuration);
NSLog(@"%lf",sender.allowableMovement);
}
//平移事件
-(void)panGRAction:(UIPanGestureRecognizer *)sender
{
//找到添加手势的图片
UIImageView *image = (UIImageView *)sender.view;
//拿到平移的坐标点在父视图上的偏移量
CGPoint point = [sender translationInView:self.view];
NSLog(@"平移后的坐标偏移量是:%@",NSStringFromCGPoint([sender translationInView:image]));
//重新设置image的中心点
image.center = CGPointMake(image.center.x+point.x, image.center.y+point.y);
//重置手势获取的偏移量
[sender setTranslation:CGPointZero inView:self.view];
}
//清扫事件
-(void)swipeGRAction:(UISwipeGestureRecognizer *)sender
{
NSLog(@"实现了清扫功能");
}
//屏幕边缘清扫事件
-(void)screenEdgeGRAction:(UIScreenEdgePanGestureRecognizer *)sender
{
NSLog(@"%d,%s",__LINE__,__FUNCTION__);
NSLog(@"实现了屏幕边缘清扫功能");
}