<span style="font-family:SimSun;font-size:18px;">
</span>
<span style="font-family:SimSun;font-size:18px;">
</span>
<span style="font-family:SimSun;font-size:18px;">
#import "ViewController.h"
@interface ViewController ()
{
UIView *_canChangeView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_canChangeView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
_canChangeView.backgroundColor = [UIColor cyanColor];
[self.view addSubview:_canChangeView];
/** recognizer识别器
* 使用手势
*1.创建手势
*2.创建绑定方法
*3.添加到视图上
*/
//点击手势
UITapGestureRecognizer *tapG = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapG:)];
[self.view addGestureRecognizer:tapG];
//长按
/**
如果长按时间过短 那么手势不会触发
当长按手势触发后 会有两次输出 一次开始时输出 一次结束时输出
*/
UILongPressGestureRecognizer *longG = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longG:)];
[self.view addGestureRecognizer:longG];
//拖动
UIPanGestureRecognizer *panG = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panG:)];
[_canChangeView addGestureRecognizer:panG];
[self.view addGestureRecognizer:panG];
//缩放
UIPinchGestureRecognizer *pinchG = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchG:)];
[_canChangeView addGestureRecognizer:pinchG];
//旋转
UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationG:)];
[_canChangeView addGestureRecognizer:rotation];
//清扫
/**
清扫就是一个拖动手势的延伸 他能四个方向拖动
他是一个移动一定距离内的拖动手势
*/
// UISwipeGestureRecognizer *swipeG = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeG:)];
// [self.view addGestureRecognizer:swipeG];
}
#pragma mark- tapGesture
- (void)tapG:(UITapGestureRecognizer *)recognizer
{
NSLog(@"点击手势----%s",__FUNCTION__);//__FUNCTION__执行的函数名字
NSLog(@"%d",__LINE__);//执行代码的行数
}
#pragma mark- longPressGesture
- (void)longG:(UILongPressGestureRecognizer *)recognizer
{// 当手势比较复杂时 我们要判断手势状态
/*
UIGestureRecognizerStateBegan 开始
UIGestureRecognizerStateEnded 结束
UIGestureRecognizerStateRecognized
UIGestureRecognizerStatePossible 有效
UIGestureRecognizerStateFail 失败
UIGestureRecognizerStateChanged 改变
UIGestureRecognizerStateCancelled 取消
*/
if (recognizer.state == UIGestureRecognizerStateBegan)
{
NSLog(@"长按手势开始---%s",__FUNCTION__);
}
else if (recognizer.state == UIGestureRecognizerStateEnded)
{
NSLog(@"长安手势结束---%s",__FUNCTION__);
}
}
#pragma mark- panGesture
- (void)panG:(UIPanGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateBegan
||recognizer.state == UIGestureRecognizerStateChanged)
{
NSLog(@"拖动手势--%s",__FUNCTION__);
/**
* 获取当前相应视图
*/
UIView *currentView = recognizer.view;
if (currentView == self.view)
{
CGPoint point = [recognizer locationInView:currentView];
// NSLog(@"%p",point);
_canChangeView.center = point;
}
else
{
CGPoint point = [recognizer locationInView:currentView.superview];
/**
* 改变中心点
*/
currentView.center = point;
}
/**
anchor 锚点 固定点
* 改变锚点
*/
// CGPoint point = [recognizer locationInView:currentView.superview];
// currentView.layer.anchorPoint = CGPointMake(-point.x/currentView.frame.size.width, -point.y/currentView.frame.size.height);
}
}
#pragma mark- pinchG
- (void)pinchG:(UIPinchGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateBegan
||recognizer.state == UIGestureRecognizerStateChanged)
{
UIView *currentView = recognizer.view;
//transform 矩阵
/**
* 矩阵
*就是把一个整体图形 分割成一个一个的小方块
*我们去修改每一个小方块的内容 从而达到整体图形的变换
*矩阵是一个二维的 结构 我们一般只进行平移 缩放
*在我们的程序中对矩阵添加了一个新的模块 Z轴 使图形可以旋转角度
* 如果想让我们的图形 按照手势缩放的比例去放大或缩小 那摩直接传递recognizer.scale
* CGFloat sx 横向坐标的比例值
* CGFloat sy 纵向坐标的比例值
*
*
*/
currentView.transform = CGAffineTransformScale(currentView.transform, recognizer.scale, recognizer.scale);
/**
* scal 缩放比例 他的默认值是1 即缩放率是1
他可以看做是手势生命周期中某个时间点的值
他再开始的时候 视图的transform会记录下来 作为缩放的初始值 在手势改变过程中他都会做一次记录 所以当我们滑动过程中要将他还原到1 否则他的缩放过程会变得很迅速
*/
recognizer.scale = 1;
}
}
#pragma mark- rorationG
- (void)rotationG:(UIRotationGestureRecognizer *)recognizer
{
if (recognizer.state == UIGestureRecognizerStateBegan
|| recognizer.state == UIGestureRecognizerStateChanged)
{
/**
* recognizer.rotation 当前手势返回的旋转角度
* CGAffineTransformRotate也可以自定义角度
*/
UIView *currentView = recognizer.view;
currentView.transform = CGAffineTransformRotate(currentView.transform, recognizer.rotation);
/**
* 每次都要对rotation进行一次清空
*/
recognizer.rotation = 0;
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
</span>
<span style="font-family:SimSun;font-size:18px;">关于anchor 锚点 固定点 可参考<a target=_blank href="http://blog.csdn.net/yongyinmg/article/details/37927833">点击打开链接</a></span>