Метод Swizzling не вызывает оригинальных Touchesbegan и Touchesdended Methods в SwiftIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Метод Swizzling не вызывает оригинальных Touchesbegan и Touchesdended Methods в Swift

Сообщение Anonymous »

Я пытаюсь реализовать метод, прописываемый в перехват Touchesbegan и Toucheseded, во всех экземплярах Uresponder. Тем не менее, я сталкиваюсь с проблемами, когда исходные методы внутри UiviewContoller не называются,
Короче говоря,
Свиджированные методы не вызывают оригинал touchesbegan и toucheseded в моем uiviewcontroler uiviewcontroller press
extension UIResponder {
static let swizzleTouchMethods: Void = {
let originalBeganSelector = #selector(touchesBegan(_:with:))
let swizzledBeganSelector = #selector(xxx_touchesBegan(_:with:))

guard let originalBeganMethod = class_getInstanceMethod(UIView.self, originalBeganSelector),
let swizzledBeganMethod = class_getInstanceMethod(UIView.self, swizzledBeganSelector) else {
return
}

method_exchangeImplementations(originalBeganMethod, swizzledBeganMethod)

let originalMovedSelector = #selector(touchesMoved(_:with:))
let swizzledMovedSelector = #selector(xxx_touchesMoved(_:with:))

guard let originalMovedMethod = class_getInstanceMethod(UIView.self, originalMovedSelector),
let swizzledMovedMethod = class_getInstanceMethod(UIView.self, swizzledMovedSelector) else {
return
}

method_exchangeImplementations(originalMovedMethod, swizzledMovedMethod)

let originalEndedSelector = #selector(touchesEnded(_:with:))
let swizzledEndedSelector = #selector(xxx_touchesEnded(_:with:))

guard let originalEndedMethod = class_getInstanceMethod(UIView.self, originalEndedSelector),
let swizzledEndedMethod = class_getInstanceMethod(UIView.self, swizzledEndedSelector) else {
return
}

method_exchangeImplementations(originalEndedMethod, swizzledEndedMethod)
}()

@objc func xxx_touchesBegan(_ touches: Set, with event: UIEvent?) {
if let touch = touches.first {
print("Swizzled touch began at: radius \(touch.majorRadius)")
}

// Call the original method (which is now swizzled)
self.xxx_touchesBegan(touches, with: event)
}

@objc func xxx_touchesMoved(_ touches: Set, with event: UIEvent?) {
if let touch = touches.first {
print("Swizzled touch moved at: radius \(touch.majorRadius)")
}

// Call the original method (which is now swizzled)
self.xxx_touchesMoved(touches, with: event)
}

@objc func xxx_touchesEnded(_ touches: Set, with event: UIEvent?) {
if let touch = touches.first {
print("Swizzled touch ended at: radius \(touch.majorRadius)")
}

// Call the original method (which is now swizzled)
self.xxx_touchesEnded(touches, with: event)
}
}

final class MyViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
UIResponder.swizzleTouchMethods
}

override func touchesBegan(_ touches: Set, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
print("original touchesBegan event")

}

override func touchesEnded(_ touches: Set, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
print("original touchesEnded event")

}
}


Подробнее здесь: https://stackoverflow.com/questions/795 ... thods-in-s
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Swift + Objective C swizzling class_getInstanceMethod возвращает ноль
    Anonymous » » в форуме IOS
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Метод обмена сообщениями Firebase Swizzling не работает
    Anonymous » » в форуме IOS
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Невозможно вызвать приложение метода экземпляра Swizzling AppDelegate (_:open:options:), нажав на глубокую ссылку схемы
    Anonymous » » в форуме IOS
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Использование оригинальных конфигов в Orchestra\Testbench TestCase
    Anonymous » » в форуме Php
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Использование оригинальных конфигов в Orchestra\Testbench TestCase
    Anonymous » » в форуме Php
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»