首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift 4添加手势: override vs @objc

在Swift 4中,我们可以使用两种方式来添加手势:override和@objc。

  1. override:这是一种使用Swift语言特性的方式,用于重写父类的方法。当我们需要在子类中添加手势时,可以通过重写父类的方法来实现。具体步骤如下:
    • 首先,在子类中创建一个新的方法,用于处理手势操作。
    • 然后,在该方法中添加手势的具体实现代码。
    • 最后,在子类中使用override关键字来重写父类的方法,并在其中调用新创建的方法。

例如,我们可以创建一个名为handleGesture的方法来处理手势操作,并在子类中重写父类的方法来添加手势:

代码语言:swift
复制

class MyViewController: UIViewController {

代码语言:txt
复制
   func handleGesture() {
代码语言:txt
复制
       // 手势操作的具体实现代码
代码语言:txt
复制
   }
代码语言:txt
复制
   override func viewDidLoad() {
代码语言:txt
复制
       super.viewDidLoad()
代码语言:txt
复制
       let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleGesture))
代码语言:txt
复制
       view.addGestureRecognizer(gestureRecognizer)
代码语言:txt
复制
   }

}

代码语言:txt
复制
  1. @objc:这是一种使用Objective-C语言特性的方式,用于在Swift中使用Objective-C的特性。当我们需要在Swift代码中使用Objective-C的手势相关API时,可以使用@objc关键字来标记方法。具体步骤如下:
    • 首先,在方法前面添加@objc关键字,以便在Swift中使用Objective-C的特性。
    • 然后,在方法中添加手势的具体实现代码。
    • 最后,在需要添加手势的地方调用该方法。

例如,我们可以创建一个名为handleGesture的方法来处理手势操作,并在需要添加手势的地方调用该方法:

代码语言:swift
复制

class MyViewController: UIViewController {

代码语言:txt
复制
   @objc func handleGesture() {
代码语言:txt
复制
       // 手势操作的具体实现代码
代码语言:txt
复制
   }
代码语言:txt
复制
   override func viewDidLoad() {
代码语言:txt
复制
       super.viewDidLoad()
代码语言:txt
复制
       let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleGesture))
代码语言:txt
复制
       view.addGestureRecognizer(gestureRecognizer)
代码语言:txt
复制
   }

}

代码语言:txt
复制

这两种方式都可以用于在Swift 4中添加手势,选择哪种方式取决于具体的需求和使用场景。无论使用哪种方式,都可以通过重写父类的方法或使用@objc关键字来实现手势的添加和处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS 仿支付宝银行卡界面(支持Swift和OC)

: false) } } 在ViewController中调用reload方法代码如下: walletView.reload(cardViews: coloredCardViews) 4....在钱包视图中实现添加卡片方法 在展示页面中我们可以看到,在页面的左上角有一个添加按钮,这个按钮的UI布局在头部视图中实现,具体的功能是,添加一个卡片,具体的实现方法如下: open func insert...在CardView中实现点击手势展示隐藏卡片 在Demo中实现在CardView中点击除了删除按钮外任何位置,都可以触发隐藏卡片的功能,这里是在CardView中添加手势来实现该功能,代码如下: public...导入项目使用介绍 最后介绍一下该如何在项目中导入该功能,下载Demo,将Demo中的FBYBankCard.framework文件和ColoredCardView.swift文件导入项目中,在需要加载的页面中直接引用即可...override func viewDidLoad() { super.viewDidLoad() } }

1.4K20
  • ARKit 教学:如何搭配SceneKit来建立一个简单的ARKit Demo设定ARKit SceneKit View从ARSCNView移除物件

    接下来,我们建立一个点位boxNode物件,这个点位可代表位置与一个物件在3D空间的坐标,但对它自己而言,他本身不会有可以看到的内容,需要协助它添加资讯。...要继续加入手势了!...是时候来做些点击手势辨识方法物件内的调用方法 从ARSCNView移除物件 在ViewController.swift加入下列代码: @objc func didTap(withGestureRecognizer...如果第一次hit test能成功移除,然后我们就将转换矩阵类型matrix_float4x4到float3,因为我们之前已增加了一个extension来完成此功能,有兴趣的话,我们也可以自行修正x, y...原文:Building a Simple ARKit Demo with SceneKit in Swift 4 and Xcode 9

    1.8K20

    iOS_按钮 cancel 手势 跟 swipe上滑手势 冲突

    按钮cancel手势 跟 swipe上滑手势 冲突 问题 最近做需求遇到一个问题,设计想在播放器底部播控栏添加上滑手势,换起换台面板。...但是因为播控栏上很多按钮,当手势起始位置为按钮内时上滑别会被识别为 UIButton 的 cancel 手势,导致无法换起面板。...搜索了一番,也没找到解决方案,最后自己各种猜测➕测试,得出一个解决方案:按钮点击事件改用 Tap 手势实现,扩展 UIView 在 touchesMoved 方法里判断手势方向是否为上滑。..., newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } open override func touchesMoved...// MARK: - 解决:上滑手势 跟 按钮 cancel 手势 冲突 func swipeGestureTest() { let view = UIView(frame: self.view.bounds

    18320

    swift中使用runtime修改属性值

    swift中使用runtime修改属性值 Swift中的@objc和dynamic关键字 在OC中继承自NSObject的类都遵循runtime, 那么纯粹的Swift类呢?...如果在swift中想使用runtime修改属性值,在属性和方法之前加上@objc关键字, 则一般情况下可以在runtime中使用了....但有一些情况下, Swift会做静态优化而无法使用runtime.要想完全使得属性和方法被动态调用, 必须使用dynamic关键字....而dynamic关键字会隐式地加上@objc来修饰. 1、例如有如下一个控制器,它有一个私有属性titleString,要想通过runtime修改属性值,必须在属性前添加@objc关键字。...override func viewDidLoad() { super.viewDidLoad() self.title = titleString } } 2、runtime修改上面控制器中私有属性

    2.4K20

    Swift 派发机制

    每一个类都会维护一个函数表,里面记录着类所有的函数,如果父类函数被 override,表里面只会保存被 override 之后的函数。一个子类新添加的函数,都会被插入到这个数组的最后。...派发方式与 SIL 文件中关键指令对应关系 sil_witness_table/sil_vtable:函数表派发 objc_method:消息机制派发 不在上述范围内的属于直接派发; Swift 语言支持三种派发方式...修饰的扩展方法及被 final 修饰的方法 声明作用域中方法 dynamic 修饰的方法或者被 @objc 修饰的扩展方法 Protocol 扩展方法 声明作用域中方法 @objc 修饰的方法或者被...声明; 通过该表格你大概就可以理解一下 Swift 语言中的一些限制了: extension 中定义的方法如果想 overrite,需要在方法上加上 @objc 修饰符;因为如果不加 @objc...比如一个函数没有 overrideSwift 就可能会使用直接派发的方式。

    1.1K20

    Swift学习总结

    10、类与结构体的区别之一,支持继承,在重载父类方法的时候要添加override关键字 Swift的类有个新特性,可以禁止子类重载某个函数,在该函数增加final关键字。...子类要重载类计算属性,同样要标记override。 14、swift提供了 open、public、internal、fileprivate、private五层访问控制。objc没有这些访问限制。...4swift对应objc中的category的语法关键字是extension,枚举、结构体、类都支持extension。...6、swift新特性,除了枚举、结构、类支持extension扩展,协议也可以进行扩展,可以添加有实现的计算属性和方法,只是不能添加存储属性。...三种语法 3、ObjC中的 #pragma mark 用 #MARK替代 4、ObjeC中有id表示任意对象,Swift中AnyObject 可以代表任何 class 类型的实例,Any 可以表示任意类型

    3K20

    iOS14开发-触摸与手势识别

    4)timestamp:时间戳,单位秒。记录了触摸事件产生或变化时的时间。 (5)phase:触摸事件的周期,即触摸开始、触摸点移动、触摸结束和中途取消。...将手势添加到需要的 UIView 上。每个手势只对应一个 UIView,当屏幕触摸在当前 UIView 里时,如果手势和预定的一样,回调方法就会调用。...override func viewDidLoad() { super.viewDidLoad() // 创建手势 let tap = UITapGestureRecognizer...self, action: #selector(gesture)) // 设置代理 gestureRecognizer.delegate = self // 添加手势...继承自 UIControl 的 UIView 都可以通过 Target-Action 方式添加事件,如果同时给它们添加手势识别, 则 Target-Action 的行为会失效,因为手势识别的优先级更高。

    2.3K20

    Swift 探索 UICollectionView 之 SupplementaryView 和 Decoration View

    为 UICollectionView 添加 Supplementary View 首先看下效果图: 具体代码逻辑如下,注释已经在代码中添加: // // BaseAPIViewController.swift...9.0, *) open func cancelInteractiveMovement() 它们代表的意思分别为: •开始交互•更新交互位置•结束交互•取消交互 在为 UICollectionView 添加手势后...,根据手势提供的三种状态,分别调用上面的四个方法,来实现拖拽排序;另外,既然 Cell 的顺序会被调整,那我们还得及时的更新数据源,来保证视图刷新后,导致拖拽的结果被还原,具体实现代码如下: 添加手势...// 添加手势 let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(handleLongGesture...(_:))) collectionView.addGestureRecognizer(longPressGesture) ‍ 手势状态判断 @objc func handleLongGesture(

    2.1K10
    领券