0

我一直在尝试复制 iPhone 仪表板主屏幕上的按钮。我想要实现的是以下内容:

  • 一个简单的按钮,带有图像及其所有 UIButton 属性。
  • 最重要的是,长按手势识别器。长按时,按钮会抖动,但您仍然可以使用它。

我已经设法做到了所有这些,但我面临以下问题,Apple 可以击败它,而我(还)不能:

在正常点击时,操作系统会稍等片刻,以确保它不是长按、双击或我猜的任何东西。在等待足够长的时间之前,它无法确定这不是一个特殊的手势。因此,每次点击该按钮都会被注册,但一切都会延迟约 1.5 秒。

这是非常糟糕的用户体验,但是当我在主屏幕上点击一个应用程序时,它是瞬间的(即使应用程序被杀死)。但是,如果我长按,它会正确注册。

我的没有。我在这里俯瞰什么?

我有这个:

在此处输入图像描述

  • 两个 UIButtons 稍微重叠,想象一下应用程序图标和角落上的“删除应用程序”按钮。(蓝色和紫色)
  • 完全包含这两个 UIButton 的 UIView。(绿色)
  • 该 UIView 上的 UILongPressGestureRecognizer(未显示)

长手势代码仅在手势达到其“开始”状态时才被调用,就像主屏幕上的 iOS 行为一样。所以在这个过程的早期。

我试过摆弄不同的属性和设置,但我无法让它工作。你们中有人做到了吗?正确的设置是什么?

4

1 回答 1

1

您可以使用 UIButton TouchDown 和 TouchUpInside 事件来实现这一点。

BOOL touchInProgress;

[self.button addTarget:self action:@selector(touchStart:) forControlEvents:UIControlEventTouchDown];
[self.button addTarget:self action:@selector(touchEnd:) forControlEvents:UIControlEventTouchUpInside];

- (void)touchStart:(id)sender {
    touchInProgress=YES;
    [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(longTouch) userInfo:nil repeats:NO];
}

- (void)touchEnd:(id)sender {
    if (touchInProgress) {
        [self openIcon];
    }
    touchInProgress=NO;

}


- (void)longTouch {
    if (touchInProgress) {
        [self deleteIcon];
    }
    touchInProgress=NO;

}

- (void)openIcon {

}

- (void)deleteIcon {

}

希望这可以帮助。

于 2016-04-28T13:47:16.730 回答