手势和长按显示菜单

来源:互联网 发布:淘宝达达妈生活馆假货 编辑:程序博客网 时间:2024/05/16 04:17

我们所需要知道的七个手势:

//    UIPinchGestureRecognizer 捏合

    //    UISwipeGestureRecognizer 轻扫(手指在屏幕上很快的滑动)

    //    UIRotationGestureRecognizer 旋转

    //    UILongPressGestureRecognizer 长按

    //    UITapGestureRecognizer 轻敲(轻触)

    //    UIPanGestureRecognizer 滑动(手指的拖动)

    //    UIScreenEdgePanGestureRecognizer 屏幕边缘手势



(1)#pragma mark -- 点击手势(UITapGestureRecognizer)


-(void)demo { 

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer allocinitWithTarget:self action:@selector(tapGerture:)];

    tap.numberOfTapsRequired = 3;

    tap.numberOfTouchesRequired = 2;

    [self.redview addGestureRecognizer:tap];

}

-(void)tapGerture:(UITapGestureRecognizer *)tap {

    NSLog(@"tap");  

}


(2)#pragma mark --滑动手势 (UIPanGestureRecognizer)

-(void)demo1 {

    UIPanGestureRecognizer *tap = [[UIPanGestureRecognizer allocinitWithTarget:self action:@selector(panGerture:)];

    [self.view addGestureRecognizer:tap];

    

}


-(void)panGerture:(UIPanGestureRecognizer *)pan {

    CGContextRef context = UIGraphicsGetCurrentContext();

    switch (pan.state) {

        case UIGestureRecognizerStateBegan: {

            _beginPoint = self.view.center;

            CGContextMoveToPoint(context, _beginPoint.x_beginPoint.y);

        }

         break;

        case UIGestureRecognizerStateChanged: {

            CGPoint point = [pan translationInView:self.redview];

            self.redview.center = CGPointMake(_beginPoint.x + point.x_beginPoint.y+point.y);

        };

            break;

        case UIGestureRecognizerStateEnded: {

        }

            break;

        case UIGestureRecognizerStateCancelled: {

        }

            break;

        default:

            break;

    }

}



(3)#pragma mark--- 捏合手势 (UIPinchGestureRecognizer)


-(void)demo2 {

    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer allocinitWithTarget:self action:@selector(pinchGerture:)];

    [self.redview addGestureRecognizer:pinch];

    

}

-(void)pinchGerture:(UIPinchGestureRecognizer *)pin {

    switch (pin.state) {

        case UIGestureRecognizerStateBegan: {   

        }

            break;

        case UIGestureRecognizerStateChanged: {

            CGFloat scale = pin.scale//获取当前比例系数

            CGFloat width = CGRectGetWidth(pin.view.frame)*(1-scale);

            CGFloat height = CGRectGetHeight(pin.view.frame)*(1-scale);

            pin.view.frame = CGRectInset(pin.view.frame, width/2, height/2);

            pin.scale = 1;

        };

            break;

        case UIGestureRecognizerStateEnded: {

         }

            break;

        case UIGestureRecognizerStateCancelled: {

         }

            break;

        default:

            break;

    }

}

(4)#pragma mark - 轻扫手势(UISwipeGestureRecognizer)


- (void)test4 {

    UISwipeGestureRecognizer *switeGesture = [[UISwipeGestureRecognizer allocinitWithTarget:self action:@selector(switeGesture:)];

    //right:向右滑,up:向上滑

    //方向最多绑定两个,而且方向相反,左右,上下

    //给它绑定两个手势

    switeGesture.direction = UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight|UISwipeGestureRecognizerDirectionUp|UISwipeGestureRecognizerDirectionDown;

    [self.redView addGestureRecognizer:switeGesture];

}


- (void)switeGesture:(UISwipeGestureRecognizer *)swite {

    NSLog(@"OK");

}



(5)#pragma mark - 旋转手势(UIRotationGestureRecognizer)

- (void)test5 {

    UIRotationGestureRecognizer *ratationGesture = [[UIRotationGestureRecognizer allocinitWithTarget:self action:@selector(ratationGesture:)];

    [self.redView addGestureRecognizer:ratationGesture];

}


- (void)ratationGesture:(UIRotationGestureRecognizer *)rotation{

    switch (rotation.state) {

        case UIGestureRecognizerStateChanged: {

            rotation.view.transform = CGAffineTransformMakeRotation(rotation.rotation);

        }

            break;

        default:

            break;

    }

}


(6)#pragma mark - 屏幕边缘手势(UIScreenEdgePanGestureRecognizer)


- (void)test7 {

    UIScreenEdgePanGestureRecognizer *gesture = [[UIScreenEdgePanGestureRecognizer allocinitWithTarget:self action:@selector(gesture:)];

    gesture.edges = UIRectEdgeRight;

    [self.view addGestureRecognizer:gesture];

}

- (void)gesture:(UIScreenEdgePanGestureRecognizer *)screenGesture {

    NSLog(@"屏幕边缘");

}


(7)#pragma mark - 长按手势(UILongPressGestureRecognizer)


- (void)test6 {

    UILongPressGestureRecognizer *longGesture = [[UILongPressGestureRecognizer allocinitWithTarget:self action:@selector(longGesture:)];

    [self.redView addGestureRecognizer:longGesture];

}


- (void)longGesture:(UILongPressGestureRecognizer *)longGesture {

    

    switch (longGesture.state) {

        case UIGestureRecognizerStateBegan: {

            NSLog(@"begin");


            CGPoint point = [longGesture locationInView:longGesture.view];

            // 按住以后弹出一个menu(菜单):copy,selected,selectedAll,paste

            UIMenuController *menuController = [UIMenuController sharedMenuController];


            UIMenuItem *item1 = [[UIMenuItem allocinitWithTitle:@"赋值" action:@selector(item1)];

            

            menuController.menuItems = @[item1];

            

            [menuController setTargetRect:CGRectMake(point.x, point.y00inView:longGesture.view];

            

            [menuController setMenuVisible:YES animated:YES];

        }

            break;

        case UIGestureRecognizerStateChanged: {

            NSLog(@"change");

        }

            break;

        case UIGestureRecognizerStateEnded: {

            NSLog(@"end");

        }

            break;

        default:

            break;

    }

}


//显示Mene的话需要重写父类的一个方法

- (BOOL)canBecomeFirstResponder {

    return YES;

}


- (void)item1 {

    

}

//menu的其他按钮,只需要重写以下方法即可

- (void)selectAll:(id)sender {

    

}


- (void)select:(id)sender {

    

}


- (void)copy:(id)sender {

    

}


- (void)paste:(id)sender {

    

}


1 0
原创粉丝点击