gpt4 book ai didi

ios - 如何响应 UITabbar 中的触摸*按下*事件

转载 作者:行者123 更新时间:2023-12-02 00:58:43 24 4
gpt4 key购买 nike

我想在用户触摸选项卡上的向下时开始为UITabBarItem设置动画。然而,UITabBarDelegate只提供了didSelect方法。在此上下文中检测 UIControlEvents.touchDown 事件的最佳方法是什么?

最佳答案

您子类化UITabBar并覆盖hitTest:withEvent:

这是一个子类的示例,它在触地时稍微缩小图像,然后在内部触地时恢复它

@interface TRCTabBar : UITabBar

@end


@implementation TRCTabBar

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *view = [super hitTest:point withEvent:event];
if ([view isKindOfClass:UIControl.class]) {
CGFloat scale = 0.90;
CGAffineTransform t = CGAffineTransformScale(CGAffineTransformIdentity, scale, scale);
[UIView animateWithDuration:0.14 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
view.transform = t;
} completion:nil];
}
return view;
}

// used as a signal to restore the image back to its original state
- (void)setSelectedItem:(UITabBarItem *)selectedItem {
[super setSelectedItem:selectedItem];
for (UIView *view in self.subviews) {
if (!CGAffineTransformIsIdentity(view.transform)) {
view.transform = CGAffineTransformIdentity;
}
}
}

@end

一些注意事项:

  1. 与通过 hitTest:withEvent: 访问的 touch-down 事件不同,touch-up-inside 事件不是直接访问的;只需重写 setSelectedItem: 即可在用户抬起手指时执行某些操作。

  2. 无法监控外部补漆(或任何其他取消事件)。因此,如果用户点击,然后向外拖动,然后抬起手指,图像将保持缩小状态,直到调用下一个 setSelectedItem:

  3. 如果您使用动画(如我提供的示例代码中所示),则必须使用 UIViewAnimationOptionAllowUserInteraction 选项。否则,setSelectedItem: 并不总是被调用。

  4. 您只想从 UITabBarButton 类(即响应触摸事件的控件)中获取触摸。用户也可能会意外触摸 UITabBar 本身,您应该忽略此触摸。 UITabBarButton 是一个内部 UIKit 类,但它是 UIControl 的子类。使用它来过滤掉所有其他被忽略的 UIView(例如 UITabBar 本身)。

  5. 显然,请确保将您的 UITabBar 类(在 Interface Builder 中或以编程方式)设置为您的自定义类。

关于ios - 如何响应 UITabbar 中的触摸*按下*事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48996473/

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