मैं आईफोन और आईपैड के लिए एक सार्वभौमिक ऐप पर कस्टम जीयूआई बना रहा हूं। आईपैड पर यह सामग्री के हेरफेर, विस्तार जानकारी और जैसे (उन्नत स्प्लिट व्यू के बारे में सोचने) जैसी उपयोगिताओं के लिए "साइड व्यू" पर भारी निर्भर करता है। एक दृश्य बिंदु से नया यूआईपी प्रस्तुति नियंत्रक मुझे इन "साइड व्यू" (और dimmedView का उपयोग नहीं करने) देने के लिए स्पॉट पर है और कार्यान्वयन को बनाए रखने और बनाए रखने के लिए सरल रहा है, जबकि स्टोरीबोर्ड के साथ अच्छी तरह से एकीकृत है। लेकिन प्रस्तुत प्रस्तुत दृश्य नियंत्रक दिखाई देने पर मुझे प्रस्तुत करने वाले दृश्य नियंत्रक की सामग्री में हेरफेर करने में सक्षम होना चाहिए। तो मेरा सवाल यह है कि, क्या मैं साइड व्यू प्रस्तुत करते समय प्रस्तुत करने वाले व्यू कंट्रोलर पर userInteractionEnabled (या समान) सेट कर सकता हूं?क्या मैं एक UIPresentationController को प्रस्तुत कर सकता हूं UserInteractionViewController पर सक्षम है?
उत्तर
UIPresentationController
, पेश दृश्य के ऊपर एक खिड़की subview के रूप अपने कंटेनर दृश्य सम्मिलित करता है इस प्रकार प्रस्तुत दृश्य बाहर किसी भी छूता है कंटेनर दृश्य से फंस जाते हैं और यह कभी बनाना:
यहाँ कोड का टुकड़ा है पर प्रस्तुत करना।
फिक्स वर्तमान दृश्य में स्पर्श के माध्यम से कंटेनर दृश्य पर एक दृश्य डालने के लिए है। आप इसे एक मंद दृश्य के रूप में उपयोग कर सकते हैं या पूरी तरह से पारदर्शी दृश्य के लिए backgroundColor
[UIColor clearColor]
पर सेट कर सकते हैं। अपने प्रेजेंटेशन कंट्रोलर कोड में पासथ्रू दृश्य सेट करें।
@interface IVPasserView : UIView
@property (strong, nonatomic) NSArray* passthroughViews;
@end
@implementation IVPasserView
- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView* hit = [super hitTest:point withEvent:event];
if (hit == self)
for (UIView* passthroughView in _passthroughViews)
{
hit = [passthroughView hitTest:[self convertPoint:point toView:passthroughView]
withEvent:event];
if (hit)
break;
}
return hit;
}
@end
नोट: जबकि इस में है कि यह एक subview वापस नहीं करता है -[UIView hitTest:withEvent:]
की भावना का उल्लंघन, इस तथ्य को कैसे प्रणाली मानक UIPopoverPresentationController
यह संभालती है। यदि आप वहां passthroughViews
संपत्ति सेट करते हैं, तो कंटेनर व्यू hitTest:withEvent:
को पासथ्रू व्यू के साथ प्रतिसाद देता है, भले ही वे पर्यवेक्षण/सबव्यू नहीं हैं! इस प्रकार यह अगले आईओएस रिलीज से बचने की संभावना है।
ठीक है, तो ऐसा लगता है कि UIPresentationController का विचार इसे एक उन्नत स्प्लिट व्यू (या कम से कम यह मेरा वर्तमान निष्कर्ष) के रूप में उपयोग करने में सक्षम नहीं है। हालांकि मैं एक कामकाज बनाने में कामयाब रहा। अगर किसी को इसे संभालने का बेहतर तरीका मिल जाए, तो कृपया मुझे टिप्पणियों में बताएं।
तो मैं क्या कर रहा सूचकांक 0. पर transitionContexts containerView में PresentingViewController के दृश्य (UIPresentationControllers containerView के रूप में ही) पदानुक्रम सम्मिलित यह मैं पारदर्शी रूप से PresentingViewControllers ध्यान में रखते हुए touchEvents को संभालने में सक्षम बनाता है। लेकिन यह प्रेजेंटिंग व्यू कंट्रोलर को अपने मूल दृश्य पदानुक्रम से देखने को हटा देता है, इसलिए जब प्रेजेंटेशन को खारिज कर दिया जाता है तो मुझे इसे वापस स्थानांतरित करने की आवश्यकता होती है। इसका अर्थ यह है कि यदि दृश्य मौजूद है, तो दृश्य को वापस देखने के लिए पेरेंट व्यू कंट्रोलर के दृश्य पर डालें, या ऐप की विंडो, यदि प्रस्तुत हो रहा है तो व्यू कंट्रोलर ऐप का रूट व्यू कंट्रोलर है (अन्य परिदृश्य भी हो सकते हैं, लेकिन यह अभी के लिए करेगा)।
यह सब UIViewControllerAnimatedTransitioning में एनिमेट ट्रांजिशन में किया गया है।
UIView.animateWithDuration(transitionDuration(transitionContext),
delay: 0.0,
usingSpringWithDamping: 1.0,
initialSpringVelocity: 0.5,
options: UIViewAnimationOptions.BeginFromCurrentState|UIViewAnimationOptions.AllowUserInteraction,
animations: {() -> Void in
animatingView.frame = finalFrame
}) { (finished:Bool) -> Void in
if !self.isPresentation {
if let parentViewController = backgroundVC.parentViewController {
parentViewController.view.addSubview(backgroundVC.view)
}
else if let window = (UIApplication.sharedApplication().delegate as! AppDelegate).window {
window.addSubview(backgroundVC.view)
}
fromView.removeFromSuperview()
}
else {
containerView.insertSubview(backgroundVC.view, atIndex: 0)
}
transitionContext.completeTransition(true)
}
आप सही हैं कि प्रस्तुति नियंत्रक कस्टम विभाजन दृश्य बनाने के लिए उपयुक्त नहीं हैं। इसके लिए, नियंत्रक रोकथाम देखें शायद एक बेहतर विकल्प है। –
मॉडल प्रस्तुति आपकी स्थिति के लिए उपयुक्त नहीं है। कस्टम कंटेनर व्यू कंट्रोलर के साथ अपने परिदृश्य को कार्यान्वित करना बेहतर है और अतिरिक्त दृश्य नियंत्रकों की प्रस्तुति को संभालने के लिए showDetailViewController:sender:
विधि ओवरराइड करें। आप आईफोन पर दृश्य नियंत्रक मोडल और उदाहरण के लिए आईपैड पर दाईं ओर दिखाने के लिए इस विधि को अनुकूलित कर सकते हैं।
यहाँ Apple Documentation से एक अंश है:
एक दृश्य नियंत्रक दिखा बनाम पेश
UIViewController वर्ग एक दृश्य नियंत्रक प्रदर्शित करने के लिए दो तरीके प्रदान करता है:
showViewController: इस: और showDetailViewController: प्रेषक: विधियां नियंत्रकों को प्रदर्शित करने के लिए सबसे अनुकूली और लचीला तरीका प्रदान करती हैं। ये विधियां प्रस्तुत करने वाले व्यू नियंत्रक को प्रस्तुति को संभालने का सर्वोत्तम तरीका तय करने दें। उदाहरण के लिए, एक कंटेनर व्यू नियंत्रक दृश्य नियंत्रक को के बजाय इसे सामान्य रूप से प्रस्तुत करने के बजाय बच्चे के रूप में शामिल कर सकता है। डिफ़ॉल्ट व्यवहार दृश्य नियंत्रक को सामान्य रूप से प्रस्तुत करता है। वर्तमान दृश्य नियंत्रक: एनिमेटेड: समापन: विधि हमेशा दृश्य नियंत्रक को सामान्य रूप से प्रदर्शित करता है। दृश्य नियंत्रक जो इस विधि को कॉल करता है वह अंततः प्रस्तुति को संभाल नहीं सकता है लेकिन प्रस्तुति हमेशा मोडल होती है। यह विधि क्षैतिज रूप से कॉम्पैक्ट वातावरण के लिए प्रस्तुति शैली अनुकूलन करती है। showViewController: प्रेषक: और showDetailViewController: प्रेषक: प्रस्तुतियां शुरू करने के लिए विधियां पसंदीदा तरीका हैं। एक दृश्य नियंत्रक उन पदानुक्रम में शेष दृश्य नियंत्रक पदानुक्रम या वर्तमान दृश्य नियंत्रक की स्थिति के बारे में कुछ भी जानने के बिना उन्हें कॉल कर सकता है। सशर्त कोड पथ लिखने के बिना इन तरीकों से अपने ऐप के विभिन्न हिस्सों में कंट्रोलर को फिर से उपयोग करना आसान हो जाता है।
अरे अलेक्जेंडर! आपके उत्तर के लिए धन्यवाद, और देर से प्रतिक्रिया के लिए मेरी माफ़ी। यह निश्चित रूप से एक दिलचस्प समाधान की तरह लगता है। मैं देखूंगा कि यह मेरी समस्या हल करता है और यदि ऐसा है तो आप इसके लिए श्रेय देते हैं। एक अच्छे विचार के लिए अब के लिए उपरोक्त। – jollyCocoa
- 1. मैं एंड्रॉइड पर ज़ूम कैसे सक्षम कर सकता हूं?
- 2. मैं WPF डेटाग्रिड पर स्क्रॉलबार कैसे सक्षम कर सकता हूं?
- 3. क्या मैं ओविन में ट्रेसिंग सक्षम कर सकता हूं?
- 4. मैं कैसे अक्षम कर सकता हूं और फिर चेतावनी को पुनः सक्षम कर सकता हूं?
- 5. अनुकूली UIPresentationController दृश्य आकार
- 6. क्या मैं वर्कबुक पर वीबीए को संकलित कर सकता हूं?
- 7. क्या मैं इसे बनाए जाने के बाद एक एक्स 11 विंडो ओपनजीएल सक्षम कर सकता हूं?
- 8. क्या मैं एक कंप्यूटर पर एक आईफोन ऐप संकलित कर सकता हूं और इसे दूसरे पर हस्ताक्षर कर सकता हूं?
- 9. क्या मैं एंड्रॉइड में एक दृश्य स्केल कर सकता हूं?
- 10. मैं अक्षम क्यों कर सकता हूं, लेकिन एक ड्रॉप करने योग्य फ़ंक्शन सक्षम नहीं कर सकता?
- 11. क्या मैं एक मैवेन प्रोफाइल को सक्रिय कर सकता हूं?
- 12. क्या मैं एक गिट सबमिशन को अनपॉपलेट कर सकता हूं?
- 13. मैं अक्षम रेडियो बटन कैसे सक्षम कर सकता हूं?
- 14. क्या यहexexharharp.xmlworker एम्बेडेड छवियों को प्रस्तुत कर सकता है?
- 15. मैं एक आईफोन पर प्रोग्रामेटिक रूप से मार्गदर्शित एक्सेस (कियोस्क मोड) कैसे सक्षम कर सकता हूं?
- 16. मैं एंड्रॉइड क्रोमियम में लॉगिंग कैसे सक्षम कर सकता हूं?
- 17. मैं अपने Django व्यवस्थापक साइट पर इनलाइन ManyToManyFields को कैसे सक्षम कर सकता हूं?
- 18. क्या मैं/कैसे कर सकता हूं ... PHP
- 19. एंड्रॉइड: क्या मैं गतिविधि के इरादे फ़िल्टर को प्रोग्रामेटिक रूप से सक्षम/अक्षम कर सकता हूं?
- 20. रेजर इंजन - मैं विभिन्न स्थितियों के आधार पर विभिन्न बॉडी टैग कैसे प्रस्तुत कर सकता हूं?
- 21. मैं कैसे जांच सकता हूं कि क्या मैं पर्ल में एक यूआरआई ऑब्जेक्ट पर होस्ट() को कॉल कर सकता हूं?
- 22. क्या मैं सिनात्रा में एसएसएल को थिन के साथ सक्षम कर सकता हूं?
- 23. क्या मैं इसे प्रस्तुत करते समय ड्रूपल को एक फॉर्म फिर से बना सकता हूं?
- 24. क्या मैं अपने पर्यावरण चर पर भरोसा कर सकता हूं?
- 25. क्या मैं HTML में एक चर घोषित कर सकता हूं?
- 26. क्या मैं प्राइमेटिव्स पर डिलीट कॉल कर सकता हूं?
- 27. क्या मैं संख्या बेसक्लास पर अंकगणितीय परिचालन कर सकता हूं?
- 28. क्या मैं मॉलोक पर वापस भरोसा कर सकता हूं?
- 29. क्या मैं रनवेटाइम पर maven project.artifactId निर्दिष्ट कर सकता हूं?
- 30. मैं जिथब पर लॉन्चपैड पर होस्ट की गई एक परियोजना को कैसे मिरर कर सकता हूं?
दिलचस्प समाधान। मुझे निश्चित रूप से यह एक कोशिश देने की जरूरत है। – jollyCocoa
प्रश्न शीर्षक में बिल्कुल समस्या के लिए यह एक अच्छा समाधान है। –
यह बहुत खूबसूरत है। –