target/action 设计模式
耦合是衡量一个程序写的好坏的标准之一。
耦合是衡量模块与模块之间关联程度的指标。
“ ⾼高内聚,低耦合 ” 是⾯向对象编程的核⼼思想 。
使⽤ target...action 实现解耦。代理设计模式
当一个类的某些功能需要被别人来实现,但是既不明确是些什么。
功能,又不明确谁来实现这些功能的时候,委托模式就可以派上用 场。
目的是为了降低类之间的耦合性 。
UIImageView
UIImageView是iOS中⽤于显⽰图⽚的类,iOS中⼏乎所有看到的图⽚,都是由这个类来显⽰的。
⼿势识别器
⼿势识别器是对触摸事件做了封装,我们⽆需⾃⼰去判断某个⼿势是否触发,⼿势识别器本⾝起到了识别作⽤,我们把重⼼放在识别之后要做什么操作上⾯。
⼿势识别器是iOS中⽐较抽象的⼀个类,⽤于识别⼀个⼿势,所谓⼿势:有规律的触摸。
⼿势识别器有7个⼦类:分别识别 轻拍⼿势、平移⼿势、轻扫⼿势、缩放⼿势、旋转⼿势、⻓按⼿势以及屏幕边界平移⼿势。
UITapGestureRecognizer 是轻拍⼿势识别器,能识别轻拍操作。
UILongPressGestureRecognizer 是⻓按⼿势识别器,能识别⻓按操作。
UIRotationGestureRecognizer 是旋转⼿势识别器,能识别旋转操作。
UIPinchGestureRecognizer 是捏合⼿势识别器,能识别捏合操作。
UIPanGestureRecognizer 是平移⼿势识别器,能识别拖拽操作。
UISwipeGestureRecognizer 是轻扫⼿势识别器,能识别拖拽操作。
UIScreenEdgePanGestureRecognizer 是屏幕边缘轻扫识别器,是iOS7中新增的⼿势。
// 第一种手势 轻拍手势 UITapGestureRecognizer
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
// 手势要加到视图上才有效果
[self.rv.imageView addGestureRecognizer:tap];
// 属性
// 轻拍几次有响应 默认是1
tap.numberOfTapsRequired = 2;
// 有几个手指轻拍 模拟器最多可模拟两个手指 按alt+光标会出来两个点,两个点重叠的同时按shift就可以同时移动两个点
tap.numberOfTouchesRequired = 2;
//第一种手势 轻拍手势实现
-(void)tapAction:(UIGestureRecognizer *)sender{
NSLog(@"轻拍手势");
}
// 第二种手势 长按手势
UILongPressGestureRecognizer * longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressAction:)];
longPress.minimumPressDuration = 0.5;
[self.rv.imageView addGestureRecognizer:longPress];
// 第二种手势 长按手势 方法实现
-(void)longPressAction:(UIGestureRecognizer *)sender{
NSLog(@"长安手势");
if (sender.state == UIGestureRecognizerStateBegan) {
//frame 的值要改整体修改,不能单给其中一个变量赋值
//获取原来的frame
CGRect temp = sender.view.frame;
temp.size.width += 50;
temp.size.height += 50;
//将改变后的frame赋回给view
sender.view.frame = temp;
sender.view.alpha = 0.5;
}else if (sender.state == UIGestureRecognizerStateEnded){
//获取原来的frame
CGRect temp = sender.view.frame;
temp.size.width -= 50;
temp.size.height -= 50;
//将改变后的frame赋回给view
sender.view.frame = temp;
sender.view.alpha = 1;
}
}
// 第三种手势 旋转手势
UIRotationGestureRecognizer * rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotaionAction:)];
[self.rv.imageView addGestureRecognizer:rotation];
// 第三种手势 旋转手势 方法实现
-(void)rotaionAction:(UIRotationGestureRecognizer *)sender{
NSLog(@"旋转手势");
//旋转
sender.view.transform = CGAffineTransformRotate(sender.view.transform, sender.rotation);
//旋转角度清零
sender.rotation = 0;
}
// 第四种手势 捏合手势
UIPinchGestureRecognizer * pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchAction:)];
[self.rv.imageView addGestureRecognizer:pinch];
// 第四种手势 捏合手势实现
-(void)pinchAction:(UIPinchGestureRecognizer *)sender{
NSLog(@"捏合手势");
// 设置缩放
sender.view.transform = CGAffineTransformScale(sender.view.transform, sender.scale, sender.scale);
sender.scale = 1;
}
// 第五种手势 平移手势
UIPanGestureRecognizer * pan =[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
[self.rv.imageView addGestureRecognizer:pan];
// 第五种手势 平移手势实现
-(void)panAction:(UIPanGestureRecognizer *)sender{
//获取移动坐标
CGPoint point = [sender translationInView:sender.view];
//通过移动坐标改变视图位置
sender.view.transform = CGAffineTransformTranslate(sender.view.transform, point.x, point.y);
//清零
[sender setTranslation:CGPointZero inView:sender.view];
}