标签: uigesturerecognizer

UISwipeGestureRecognizer滑动长度

知道是否有办法获得滑动手势或触摸的长度,以便我可以计算距离?

iphone gesture ipad uigesturerecognizer ios

36
推荐指数
2
解决办法
3万
查看次数

MKMapView上的UIPanGestureRecognizer?

当用户使用地图视图移动时,我想添加一些逻辑,即他进行平移触摸.但是当我添加手势识别器并且我想记录触摸时,没有任何反应.当我在另一个视图控制器中尝试它并将识别器添加到控制器的视图时,它可以正常工作.

这是我的代码(map视图是应用程序委托的属性,因为即使它不可见,我还需要用它做一些其他的事情):

- (void)viewDidLoad
{
    ...
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(showPan)];
    [appDelegate.mapView addGestureRecognizer:panGesture];
    [panGesture release];
}

- (void)showPan
{
    NSLog(@"pan!");
}
Run Code Online (Sandbox Code Playgroud)

我使用最新的iOS 4.2.1

谢谢你的建议.

cocoa-touch objective-c mkmapview uigesturerecognizer

36
推荐指数
1
解决办法
8204
查看次数

禁用手势识别器

我有两种类型的识别器,一种用于轻敲,一种用于轻扫

UIGestureRecognizer *recognizer;

//TAP
recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(numTap1:)];
[(UITapGestureRecognizer *)recognizer setNumberOfTouchesRequired:1];
[self.view addGestureRecognizer:recognizer];
self.tapRecognizer = (UITapGestureRecognizer *)recognizer;
recognizer.delegate = self;
[recognizer release];

//SWIPE RIGHT
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRight:)];
self.swipeRightRecognizer =(UISwipeGestureRecognizer *)recognizer;
swipeRightRecognizer.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:swipeRightRecognizer];
self.swipeRightRecognizer = (UISwipeGestureRecognizer *)recognizer;
[recognizer release];
Run Code Online (Sandbox Code Playgroud)

使用此功能,我可以禁用某些对象的点击.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {

if ((touch.view == loseView) || (touch.view == subBgView) || (touch.view == btnAgain)) {

    return NO;
}

return YES;
}
Run Code Online (Sandbox Code Playgroud)

如何禁用滑动?

非常感谢!

xcode objective-c swipe uigesturerecognizer

36
推荐指数
2
解决办法
5万
查看次数

基于UIPanGestureRecognizer速度的UIView动画

我希望能够在屏幕上和屏幕外移动子视图,就像在iPhone照片应用程序中构建的图像之间进行浏览一样,所以当我用手指放开时子视图的屏幕超过1/2,它必须屏幕上的动画,但它也必须支持滑动,因此如果滑动/平移速度足够高,它必须在屏幕上显示动画,即使屏幕可能小于1/2.

我的想法是使用UIPanGestureRecognizer,然后测试速度.这是有效的,但是如何基于视图的当前位置和平移速度为UIView的移动设置正确的动画持续时间,使其看起来平滑?如果我设置一个固定值,与我的手指滑动速度相比,动画开始变慢或变快.

uiview uigesturerecognizer uiviewanimation ios uipangesturerecognizer

36
推荐指数
2
解决办法
3万
查看次数

UIGestureRecognizer接收触摸,但也将其转发给UIControl

你将如何允许UIGestureRecognizerUIView接收触控事件,但也确保其他,垫层/叠加UIView也收到同样的触摸事件?

让我们说我有以下观点 - hierachie: 查看hierachie涂鸦

视图A(蓝色)和B(红色)都是同一超视图(灰色)的子视图.换句话说,他们都是兄弟姐妹,顺序决定了哪一个涵盖了另一个.

选项1:视图B(红色)具有常规UIButton作为其子视图.选项2:视图A(蓝色)具有常规UIButton作为其子视图.

给出选项1以便解释:视图A(蓝色UITapGestureRecognizer)附加了(或者甚至更多,其他UIGestureRecognizers).什么是最优雅的方法,以确保它UIButton确实接收其区域的所有接触,但视图A(蓝色)接收它的那些接触UITapGestureRecognizer

如果可能的话,解决方案不应该涉及扩展UIButton-class并手动转发按钮本身的任何事件.想象一下,视图B将包含更多控件,而不仅仅是一个按钮.所有这些控件都应该以某种方式允许视图A接收它的触摸UIGestureRecognizer.

我确实提供了两个选项,因为我不关心那些视图(A或B)中的哪一个是第一个,只要两个接收到触摸.

到目前为止,我的所有方法都突然达到了死胡同.也许自定义响应链是一个很好的解决方案?我一直认为在整个UIKit/ UIEvent/ UIResponder堆栈中必须有一个优雅的解决方案.

uiview uiresponder uigesturerecognizer ios uievent

35
推荐指数
1
解决办法
1万
查看次数

如何在iOS中检测滑动手势?

在我的iPhone应用程序中,我需要识别用户在视图上进行的滑动手势.

我希望识别滑动手势并在滑动时执行功能.

我需要视图应该水平滑动并在用户进行滑动手势时显示另一个视图.

需要做什么?

我怎么认出来的?

gesture-recognition swipe uigesturerecognizer ios

34
推荐指数
2
解决办法
4万
查看次数

UIImageView上的手势识别器(滑动)

当我使用此代码在UIImageView上滑动时,我正在尝试NSLog,但由于某些原因它不起作用.任何的想法 ?

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIImage *image = [UIImage imageNamed:@"image2.png"];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

    imageView.frame = [[UIScreen mainScreen] bounds];

    [self.view addSubview:imageView];

    UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwipeHandle:)];
    [recognizer setNumberOfTouchesRequired:1];
    [imageView addGestureRecognizer:recognizer];

}

- (void)rightSwipeHandle:(UISwipeGestureRecognizer*)gestureRecognizer {
    NSLog(@"right swipe");
}
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c uiimageview uigesturerecognizer ios

33
推荐指数
3
解决办法
4万
查看次数

从UIGestureRecognizer中排除子视图

我有一个UIView('容器视图'),其中包含几个"子视图".我想在容器视图中添加一个UITapGestureRecognizer,这样当我触摸容器视图内的区域但在子视图之外时,它会被激活.

此时,触摸容器视图内的任何位置(包括子视图内部)都会激活手势识别器.

实现看起来像这样:在控制器中:

ContainerView *containerView = [[ContainerView alloc] initWithSubViews:array];
UITapGestureRecognizer *tap = [UITapGestureRecognizer alloc] initWithTarget:self action:@selector(someSelector)];
[containerView addGestureRecognizer:tap];
[self.view addSubView:containerView];
Run Code Online (Sandbox Code Playgroud)

在ContainerView.m中

-(id)initWithSubviews:(NSArray *)array {
    for (subView *s in array) {
        [self addSubView:s];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

我认为问题出现是因为在子视图之后添加了手势识别器.如果这是真的那么解决方案将需要将initWithSubViews方法分成两个单独的方法,我宁愿避免.

谢谢

xcode objective-c uiview uigesturerecognizer

32
推荐指数
4
解决办法
2万
查看次数

Swift UIGestureRecogniser关注手指

我正在使用Swift制作iOS8应用程序.我希望用户能够使用手势来显示界面的某些部分.因此,例如,用户将他们的手指向上滑动,他们滑动手指的视图移开,按照他们的手指显示下面的另一个视图.

我想要的是一个手势,给出一个类似于你可以从屏幕顶部拉下来的通知框的结果.我一直在看文档,我似乎无法找到合适的手势.

我看到一个名为UISwipeGestureRecogniser,但唯一的问题是,它不会跟随你的手指,它只是在我向上/向下滑动手指时运行一个功能.

这是文档页面:https: //developer.apple.com/documentation/uikit/uigesturerecognizer

uigesturerecognizer ios swift ios8

32
推荐指数
1
解决办法
4万
查看次数

在UITableView中检测水平平移

我正在使用UIPanGestureRecognizer来识别UITableView中的水平滑动(准确地说在单元格上,尽管它被添加到表本身).然而,这个手势识别器显然从表中窃取了触摸.我已经有了pangesturerecognizer来识别水平滑动,然后对齐; 但是如果用户通过垂直滑动开始,它应该将该触摸的所有事件传递给tableview.

我尝试过的一件事是禁用识别器,但它不会滚动直到下一个触摸事件.所以我需要它立即通过该活动.

我尝试的另一件事就是让它自己滚动,但是在停止触摸后你会错过持久的速度.

下面是一些代码:

//In the viewdidload method
UIPanGestureRecognizer *slideRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(sliding:)];
[myTable addGestureRecognizer:slideRecognizer];



-(void)sliding:(UIPanGestureRecognizer *)recognizer
{
    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
    CGPoint translation = [recognizer translationInView:favoritesTable];
    if (sqrt(translation.x*translation.x)/sqrt(translation.y*translation.y)>1) {
        horizontalScrolling = YES; //BOOL declared in the header file
        NSLog(@"horizontal");
        //And some code to determine what cell is being scrolled:
        CGPoint slideLocation = [recognizer locationInView:myTable];
        slidingCell = [myTable indexPathForRowAtPoint:slideLocation];
        if (slidingCell.row == 0) {
            slidingCell = nil;
        }

    }
    else
    {
        NSLog(@"cancel");
    }

    if (recognizer.state == UIGestureRecognizerStateEnded …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch objective-c uitableview uigesturerecognizer

31
推荐指数
2
解决办法
2万
查看次数