//UIGestureRecognizer手勢是一個抽象類(子類有用)
//手勢:點擊固逗,平移左权,捏合晨仑,輕掃褐墅,旋轉(zhuǎn),長按屏幕洪己,邊緣滑動
/*
1.創(chuàng)建手勢對象
2.綁定觸發(fā)手勢的范圍
3.實現(xiàn)觸發(fā)手勢是調(diào)用的方法
4.根據(jù)手勢的不同的狀態(tài)做出不同的操作
*/
/*
//1.點擊
//創(chuàng)建點擊手勢類的對象并綁定觸發(fā)方法
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)];
//設(shè)置需要點擊幾次
tapGesture.numberOfTapsRequired = 2;
//設(shè)置需要幾根手指點擊
tapGesture.numberOfTouchesRequired = 2;
//給視圖添加手勢
[myView addGestureRecognizer:tapGesture];
*/
//點擊方法
- (void)tapGesture:(UITapGestureRecognizer *)gesture {
//獲取手勢綁定的視圖
UIView *view = gesture.view;
view.backgroundColor= [UIColorgreenColor];
}
/*
2.平移手勢
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)];
[myView addGestureRecognizer:panGesture];
*/
//平移方法
- (void)panGesture:(UIPanGestureRecognizer*)gesture {
//判斷手勢狀態(tài)
switch(gesture.state) {
//開始
case UIGestureRecognizerStateBegan:
break;
//改變
case UIGestureRecognizerStateChanged:
{
UIView *view = gesture.view;
//偏移量
CGPoint offset = [gesture translationInView:view];
//移動位置
view.frame=CGRectOffset(view.frame, offset.x, offset.y);
//坐標(biāo)位置
[gestureset Translation:CGPointZeroinView:view];
}
break;
//結(jié)束
case UIGestureRecognizerStateEnded:
break;
default:
break;
}
}
/*
//3.捏合(縮放) 一般不使用捏合手勢妥凳,一般使用scrollView自帶的縮放功能
UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGesture:)];
[myView addGestureRecognizer:pinchGesture];
*/
//捏合方法
- (void)pinchGesture:(UIPinchGestureRecognizer *)gesture {
CGRect _rect;
switch(gesture.state) {
case UIGestureRecognizerStateBegan:
{
_rect = gesture.view.frame;
}
break;
case UIGestureRecognizerStateChanged:
{
//第一種方式
// ???????????CGFloat scale = gesture.scale;
// ???????????CGFloat dx = (1 - scale) * CGRectGetWidth(gesture.view.frame) / 2;
// ???????????CGFloat dy = (1 - scale) * CGRectGetHeight(gesture.view.frame) / 2;
// ???????????//以初始的frame進(jìn)行改變
// ???????????gesture.view.frame = CGRectInset(_rect, dx, dy);
//第二種方式
gesture.view.transform=CGAffineTransformScale(gesture.view.transform, gesture.scale, gesture.scale);
//每次都是比例為1
gesture.scale= 1;
}
break;
case UIGestureRecognizerStateEnded:
break;
default:
break;
}
}
/*
//4.輕掃
UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGesture:)];
//輕掃方向(上下左右)
swipeGesture.direction = UISwipeGestureRecognizerDirectionUp;
//如果需要四個方向的輕掃就創(chuàng)建四個手勢
[myView addGestureRecognizer:swipeGesture];
*/
//輕掃方法
- (void)swipeGesture:(UISwipeGestureRecognizer *)gesture {
switch(gesture.direction) {
caseUISwipeGestureRecognizerDirectionUp:
{
//獲取手勢綁定的視圖
UIView*view = gesture.view;
view.backgroundColor= [UIColor greenColor];
}
break;
default:
break;
}
}
/*
//5.旋轉(zhuǎn)
UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGesture:)];
[myView addGestureRecognizer:rotationGesture];
*/
//旋轉(zhuǎn)方法
- (void)rotationGesture:(UIRotationGestureRecognizer *)gesture {
switch(gesture.state) {
case UIGestureRecognizerStateBegan:
break;
case UIGestureRecognizerStateChanged:
{
gesture.view.transform=CGAffineTransformMakeRotation(gesture.rotation);
}
break;
case UIGestureRecognizerStateEnded:
{
//回到初始狀態(tài)默認(rèn)位置
gesture.view.transform=CGAffineTransformIdentity;
}
break;
default:
break;
}
}
/*
//6.長按
UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGresture:)];
//設(shè)置長按反應(yīng)時間
longPressGesture.minimumPressDuration = 1;
[myView addGestureRecognizer:longPressGesture];
*/
//長按方法
- (void)longPressGresture:(UILongPressGestureRecognizer *)gesture {
switch(gesture.state) {
case UIGestureRecognizerStateEnded:
NSLog(@"長按添加");
break;
default:
break;
}
//UIMenuController菜單控制器
//sharedMenuController單例類
UIMenuController *menuVC = [UIMenuController sharedMenuController];
//菜單項
UIMenuItem *itme1 = [[UIMenuItemalloc] initWithTitle:@"粘貼" action:@selector(item1Click)];
UIMenuItem *itme2 = [[UIMenuItemalloc] initWithTitle:@"復(fù)制" action:@selector(item2Click)];
menuVC.menuItems= @[itme1,itme2];
//出現(xiàn)位置
[menuVC setTargetRect:CGRectMake(gesture.view.center.x, gesture.view.center.y, 0, 0) inView:self.view];
//讓menuVC顯示出來
[menuVC setMenuVisible:YES animated:YES];
}
//如果想要UIMenuController顯示出來必須重寫下面的方法
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (void)item1Click{
NSLog(@"粘貼");
}
- (void)item2Click{
NSLog(@"復(fù)制");
}
//7.屏幕邊緣滑動
UIScreenEdgePanGestureRecognizer *SEPGesture = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(screenEdgePanGesture:)];
//必須制定一個滑動邊緣
SEPGesture.edges=UIRectEdgeLeft;
[self.view addGestureRecognizer:SEPGesture];
//屏幕邊緣滑動方法
- (void)screenEdgePanGesture:(UIScreenEdgePanGestureRecognizer *)gesture {
switch(gesture.state) {
case UIGestureRecognizerStateEnded:
NSLog(@"滑動");
break;
default:
break;
}
}
#warning注意事項
//UIImageView添加手指之前需要設(shè)置userInteractionEnabled為YES
//TODO:這是錯誤
UITapGestureRecognizer *tap1 = [[UITapGestureRecognizer alloc]initWithTarget:selfaction:@selector(tap1:)];
[myView addGestureRecognizer:tap1];
UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(tap2:)];
[myView addGestureRecognizer:tap2];
//當(dāng)tap2執(zhí)行失敗時,才使用tap1答捕,避免崩潰
[tap1 requireGestureRecognizerToFail:tap2];
}
- (void)tap1:(UITapGestureRecognizer*)tap1 {
}
- (void)tap2:(UITapGestureRecognizer*)tap2 {
}