UIday05:target/action设计模式 代理设计模式 UIImageView ⼿势识别器

 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];
    
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值