复制iOS的仪表板应用按钮,一个带有长按手势识别器的按钮
Posted
技术标签:
【中文标题】复制iOS的仪表板应用按钮,一个带有长按手势识别器的按钮【英文标题】:Replicate iOS's dashboard app button, a button with a long press gesture recognizer 【发布时间】:2016-04-28 13:23:24 【问题描述】:我一直在尝试复制 iPhone 仪表板主屏幕上的按钮。我想要达到的目标如下:
一个简单的按钮,带有图像及其所有 UIButton 属性。 最重要的是,长按手势识别器。长按时,按钮会抖动,但您仍然可以使用它。我已经设法做到了所有这些,但我面临以下问题,Apple 可以解决这个问题,而我(还)不能:
在正常点击时,操作系统会稍等片刻以确保它不是长按、双击或任何我猜的。在等待足够长的时间之前,它无法确定这不是一个特殊的手势。因此,每次点击该按钮都会被注册,但一切都会延迟大约 1.5 秒。
这是非常糟糕的用户体验,但是当我在主屏幕上点击一个应用程序时,它是瞬间的(即使应用程序被杀死)。但是,如果我长按,它会正确注册。
我的没有。我在这里俯瞰什么?
我有这个:
两个 UIButtons 稍微重叠,想象一下应用程序图标和角落上的“删除应用程序”按钮。 (蓝色和紫色) 正好包含这两个 UIButton 的 UIView。 (绿色) 该 UIView 上的 UILongPressGestureRecognizer(未显示)只有在手势达到“开始”状态时才会调用长手势代码,就像主屏幕上的 ios 行为一样。在这个过程的早期阶段。
我试过摆弄不同的属性和设置,但我无法让它工作。你们中有人做到了吗?正确的设置是什么?
【问题讨论】:
仪表板我假设你的意思是跳板。您已经确定了响应问题,即 UIButton 上的长按识别器。 IMO 会更好,从延迟的角度来看,只使用按钮而不使用手势。利用按钮带来的事件。在着陆时启动一个计时器,该计时器将触发图像更改并开始摇摆效果。如果计时器尚未触发,则在内部触摸或外部触摸拖动事件会使计时器无效。使用边缘插图来适应图像随图标徽章的变化。 【参考方案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
希望这会有所帮助。
【讨论】:
以上是关于复制iOS的仪表板应用按钮,一个带有长按手势识别器的按钮的主要内容,如果未能解决你的问题,请参考以下文章