2017-10-06 9 views
5

मुझे एक भ्रमित स्थिति है।प्रस्तुत किए गए UIView एसकेएससीन - दृश्यों को हमेशा दृश्य में क्यों जा रहे हैं?

class MyView: SKView { 
    ... 
    public override func awakeFromNib() { 
     super.awakeFromNib() 
     let gameScene = MyGameScene(...) 
     // ... 
     presentScene(gameScene) 

     let view = UIView() 
     view.frame = bounds 
     view.isUserInteractionEnabled = true 
     addSubview(view) 
    } 
    ... 
} 

class MyGameScene: SKScene { 
    ... 
    public override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     print("touch received") 
    } 
    ... 
} 

मैं एक SKView है कि एक SKScene पेश है: सबसे पहले, यहाँ कोड है। इसे पेश करने के बाद, मैं UIView जोड़ता हूं जो स्क्रीन भर रहा है। हालांकि, जब मैं ऐप शुरू करता हूं और स्क्रीन पर टैप करता हूं, तो "प्राप्त स्पर्श" मुद्रित होता है, जिसका अर्थ यह है कि स्पर्श दृश्य के माध्यम से मिलता है, जो view के पीछे होना चाहिए। ऐसा क्यों है?

और इसे रोकने के लिए मैं क्या कर सकता हूं?

मैंने दृश्य में एक इशारा पहचानकर्ता जोड़ने का भी प्रयास किया। यह समस्या को रोकता नहीं है, हालांकि (भले ही मैंने cancelsTouchesInView को सत्य पर सेट किया है)

किसी भी मदद के लिए धन्यवाद।

+0

'view.isUserInteractionEnabled = false' को आज़माएं जो इसे बनाना चाहिए ताकि GameScene SKView स्पर्श को स्वीकार न करे –

+0

मुझे पता है, यही है 'isUserInteractionEnabled' है। मैं * चाहता हूं कि यह स्पर्श स्वीकार करे। और यदि आपका मतलब है 'MyGameScene' पर इसे अक्षम करना, यह एक विकल्प नहीं है। 'SKView' को स्पर्श पकड़ना चाहिए और इसे – Quantm

+0

पर रीडायरेक्ट नहीं करना चाहिए, क्या आप 'presentSene()' – murphguy

उत्तर

0

ऐसा लगता है कि आप किसी प्रकार का एचयूडी हासिल करने की कोशिश कर रहे हैं। SceneKit शुद्ध UIKit ताकि आप अपने दृष्टिकोण अनुकूल करने के लिए की आवश्यकता होगी नहीं है - कुछ विचार:

  • UIButton अभी भी यहाँ का उल्लेख के रूप में काम करना चाहिए: added button to sceneKit view but it has a lag
  • नल इशारा recogniser SCNView से जुड़ी: https://stackoverflow.com/a/42982177/5329717
  • हैं आपको वास्तव में इस विशेष UIView की आवश्यकता है, आप इसे एक छवि के रूप में प्रस्तुत कर सकते हैं और SKSpriteNodeSKTexture के साथ उपयोग कर सकते हैं और वहां स्पर्श को संभाल सकते हैं।
  • वास्तव में ऐसा नहीं है की सिफारिश की है, लेकिन एक अंतिम उपाय के रूप में आप जोड़ सकते हैं अपने UIView सीधे UIWindow
+0

आपके इनपुट के लिए धन्यवाद। हालांकि, मुझे इसके लिए कामकाज पता है, लेकिन यह मुझे खराब करता है क्योंकि ऐसा नहीं लगता कि मुझे लगता है कि यह काम करना चाहिए (इसकी संभावना है कि इसका कोई कारण हो, और मैं इसके बारे में जानना चाहता हूं)। यह प्रतिक्रियाकर्ता श्रृंखला के रूप में ऐसी प्रतीत होती है कि इस तरह की एक छोटी सी चीज के लिए समाधान "हैक" करने का अधिकार नहीं है। – Quantm

+0

क्या माता-पिता के दृश्य फ्रेम के अंदर दृश्य है? यह स्पर्श घटनाओं को नहीं मिलेगा। –

+0

हां यह माता-पिता के फ्रेम – Quantm

0

आपका समस्या ठीक हो यदि आप SKView की superview के दृश्य जोड़ने (यानी पेश दृश्य नियंत्रक में जोड़ने के लिए)।

तो आप इन पंक्तियों के साथ कुछ कर रही कोशिश कर सकते हैं:

let view = UIView() 
view.frame = bounds 
view.isUserInteractionEnabled = true 
superview?.addSubview(view) 

वैकल्पिक रूप से आप यह खिड़की को जोड़ सकते हैं, लेकिन यह वास्तव में अनुशंसित नहीं है।

+0

यह समन्वय प्रणाली को बदल देगा और 'view.frame = bounds' काम नहीं करेगा। आपको समन्वय प्रणालियों के बीच कनवर्ट करना होगा, जो जटिल हो रहा है, जो गन्दा हो सकता है।इसके अलावा, यह समाधान की तरह महसूस नहीं करता है, यह समस्या से बचने के लिए सिर्फ एक कामकाज है: / – Quantm

संबंधित मुद्दे