Я пытаюсь реализовать метод, прописываемый в перехват 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
Метод Swizzling не вызывает оригинальных Touchesbegan и Touchesdended Methods в Swift ⇐ IOS
Программируем под IOS
1744353859
Anonymous
Я пытаюсь реализовать метод, прописываемый в перехват Touchesbegan и Toucheseded, во всех экземплярах Uresponder. Тем не менее, я сталкиваюсь с проблемами, когда исходные методы внутри UiviewContoller не называются,
Короче говоря,
Свиджированные методы не вызывают оригинал [b] touchesbegan [/b] и [b] toucheseded [/b] в моем [b] uiviewcontroler [/b] 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")
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79568159/method-swizzling-not-calling-original-touchesbegan-and-touchesended-methods-in-s[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия