gpt4 book ai didi

ios - 是否可以在 UIButton 上实现 3d touch?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:26 26 4
gpt4 key购买 nike

我是 iOS 开发的新手,但我需要在 UIButton 上实现 3d touch,当用户在按钮快捷菜单上施加力时会弹出,即使有人可以向我提供 ObjectiveC 中的 3d touch 示例代码也是如此赞赏。提前致谢。

最佳答案

是的,我在下面的 github 示例应用程序中演示了如何检测 UIButton 上的 3d 触摸。对于菜单弹出部分,我将把它留给您来实现,但这将为您提供力/3d 触摸片。

https://github.com/foggzilla/DFContinuousForceTouchGestureRecognizer

我这样做的方法是使用 DFContinuousForceTouchGestureRecognizer我已经在示例项目中提供了。

DFContinuousForceTouchGestureRecognizer 提供有关压力变化的连续更新,因此您可以做一些不错的事情,例如随着用户改变对按钮施加的压力而改变按钮,而不是单个事件。如果您只想要一个事件,您可以忽略 DFContinuousForceTouchDelegate 中的所有内容,但 - (void) forceTouchRecognized 回调除外。

您可以下载此示例应用程序并在支持强制按下的设备上运行该示例应用程序以查看其感受。

在您的 UIViewController 实现中:

- (void)viewDidLoad {
[super viewDidLoad];
_forceTouchRecognizer = [[DFContinuousForceTouchGestureRecognizer alloc] init];
_forceTouchRecognizer.forceTouchDelegate = self;

[self.button addGestureRecognizer:_forceTouchRecognizer];
}

实现强制触摸委托(delegate)协议(protocol):

#pragma DFContinuousForceTouchDelegate

- (void)forceTouchRecognized:(DFContinuousForceTouchGestureRecognizer *)recognizer {
self.button.transform = CGAffineTransformIdentity;
[self.button setNeedsDisplay];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[[UIAlertView alloc] initWithTitle:@"Force Touch Button" message:@"YEAH!!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
});
}
- (void)forceTouchRecognizer:(DFContinuousForceTouchGestureRecognizer *)recognizer didStartWithForce:(CGFloat)force maxForce:(CGFloat)maxForce {
CGFloat transformDelta = 1.0f + ((force/maxForce) / 3.0f);
self.button.transform = CGAffineTransformMakeScale(transformDelta, transformDelta);
[self.button setNeedsDisplay];
}

- (void)forceTouchRecognizer:(DFContinuousForceTouchGestureRecognizer *)recognizer didMoveWithForce:(CGFloat)force maxForce:(CGFloat)maxForce {
CGFloat transformDelta = 1.0f + ((force/maxForce) / 3.0f);
self.button.transform = CGAffineTransformMakeScale(transformDelta, transformDelta);
[self.button setNeedsDisplay];
}

- (void)forceTouchRecognizer:(DFContinuousForceTouchGestureRecognizer *)recognizer didCancelWithForce:(CGFloat)force maxForce:(CGFloat)maxForce {
self.button.transform = CGAffineTransformIdentity;
[self.button setNeedsDisplay];
}

- (void)forceTouchRecognizer:(DFContinuousForceTouchGestureRecognizer *)recognizer didEndWithForce:(CGFloat)force maxForce:(CGFloat)maxForce {
self.button.transform = CGAffineTransformIdentity;
[self.button setNeedsDisplay];
}

- (void)forceTouchDidTimeout:(DFContinuousForceTouchGestureRecognizer *)recognizer {
self.button.transform = CGAffineTransformIdentity;
[self.button setNeedsDisplay];
}

请注意,这仅在支持强制触摸的设备上有用。

此外,如果您在 iOS8 或以下版本上运行,则不应将 DFContinuousForceTouchGestureRecognizer 添加到 View 中,因为它使用了 UITouch 上的新 force 属性> 仅适用于 iOS9。

如果你在 iOS8 上添加它会崩溃,所以如果你支持早于 iOS 9 的版本,请根据你运行的 iOS 版本有条件地添加这个识别器。

关于ios - 是否可以在 UIButton 上实现 3d touch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32549644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com