ऐप प्रतिनिधि या कहीं और में कुंजी UIWindow में स्पर्श ईवेंट को संभालना संभव है?UIWindow में स्पर्श ईवेंट का जवाब कैसे दें?
किसी भी मदद की सराहना की जाएगी कृपया।
ऐप प्रतिनिधि या कहीं और में कुंजी UIWindow में स्पर्श ईवेंट को संभालना संभव है?UIWindow में स्पर्श ईवेंट का जवाब कैसे दें?
किसी भी मदद की सराहना की जाएगी कृपया।
UIWindow
में sendEvent:
नामक एक आसान पकड़-सभी विधि है जो ईवेंट-हैंडलिंग पाइपलाइन की शुरुआत के करीब हर घटना को देखती है। यदि आप कोई गैर-मानक अतिरिक्त ईवेंट हैंडलिंग करना चाहते हैं, तो इसे रखने के लिए यह एक अच्छी जगह है। कुछ ऐसा:
- (void)sendEvent:(UIEvent *)event {
if ([self eventIsNoteworthy:event]) [self extraEventHandling:event];
[super sendEvent:event]; // Apple says you must always call this!
}
डॉक्स: UIWindow class reference | iOS event delivery docs
This blog post भी कहा गया है कि कैसे hitTest:withEvent:
ओवरराइड करने के लिए कुछ घटनाओं को पकड़ने के लिए इससे पहले कि वे दृश्य पदानुक्रम में लक्ष्य पत्ती subview करने के लिए बाध्य कर रहे हैं। यदि आप चाहें तो UIWindow
ऑब्जेक्ट पर आप उस विधि को ओवरराइड भी कर सकते हैं।
UIWindow UIView का एक उपवर्ग है, तो आप बस इसे उपवर्ग और इसका इस्तेमाल आप में AppDelegate:
self.window = [[MyWindow alloc] initWithFrame:CGRectMake(0,0,320,480)]; // Sorry for hard-coded frame size!
और में MyWindow आप -hitTest ओवरराइड: withEvent: और/या -pointInside: withEvent:
UIWindow
UIResponder
का उप-वर्ग है, जिसमें स्पर्श ईवेंट को संभालने के लिए एपीआई हैं (उदाहरण के लिए, touchesBegan:withEvent:
)। इसके बाद UIWindow को उपclass करना संभव है, स्पर्श ईवेंट हैंडलिंग API को ओवरराइड करें, और स्पर्श ईवेंट को स्वयं प्रबंधित करें।
आपको अपनी खुद की कक्षा के साथ UIWindow
उपclass करना होगा और sendEvent:
विधि ओवरराइड करना होगा। लेकिन याद रखें कि विधि अन्य प्रकार की घटनाओं को प्राप्त करती है - न केवल स्पर्श करती है ताकि आपको ईवेंट प्रकार (event.type == UIEventTypeTouches
) की जांच करनी पड़े। चूंकि आप स्पर्शों का सेट प्राप्त करते हैं, इसलिए आप यह जांचना चाहेंगे कि कौन से लोग अभी शुरू हुए हैं, जो समाप्त हो गए हैं, स्थानांतरित हो गए हैं। ऐसा करने के लिए आपको सभी टच के माध्यम से फिर से भरना होगा और प्रत्येक UITouch
की phase
संपत्ति की जांच करनी होगी।
@implementation TouchWindow
- (void)sendEvent:(UIEvent *)event {
if (event.type == UIEventTypeTouches) {
for(UITouch * t in [event allTouches]) {
if(t.phase == UITouchPhaseBegan) {
/*
Paste your code here.
Inform objects that some touch has occurred.
It's your choice if you want to perform method/selector directly,
use protocols/delegates, notification center or sth else.
*/
}
}
}
[super sendEvent:event];
}
@end
पाठ्यक्रम TouchWindow के
UIWindow
@interface TouchWindow : UIWindow
@end
के उपवर्ग है और आप शायद XCode में अपने .xib फ़ाइल में उस वर्ग बदलने के लिए होगा
UIWindow कुछ UITableView के समान subviews है आखिरी बार खिड़की को संभालने का मौका मिलने से पहले सभी स्पर्श घटनाओं को पकड़ लेता है। तो स्पर्श करता है बीज: साथ: खिड़की के तरीकों का समूह कभी भी इस परिस्थितियों में नहीं बुलाया जाता है। इस मामले में sendEvent: UIWindow तालिका दृश्य देखने से पहले स्पर्श घटनाओं को संभालने का एकमात्र तरीका है। –