स्थापना संक्षेप में:की एक नव निर्मित सही फ्रेम CAShapeLayer
- एप्पल
frame
याbounds
एकCAShapeLayer
स्वचालित रूप से करने के लिए निर्धारित नहीं करता है (और एप्पल नहीं[UIView sizeThatFits]
के किसी समान लागू किया गया है) - आप सेट करते हैं पथ के बाध्यकारी बॉक्स के आकार का उपयोग करके फ्रेम ... सब कुछ गलत हो जाता है। कोई फर्क नहीं पड़ता है आप कैसे यह सेट करने का प्रयास है, यह शिकंजा-अप पथ
तो, सही तरीका प्रोग्राम के रूप में की एक नव जोड़ा CGPath
साथ एक नव निर्मित CAShapeLayer
फ्रेम सेट करने के लिए क्या है? इस मामले पर ऐप्पल के दस्तावेज़ चुप हैं।
बातें मैं कोशिश की है, वह काम नहीं:
- एक
CAShapeLayer
- एक
CGPath
बनाएँ, परत - में जोड़ने की जाँच करें परत की
frame
- यह है{{0,0},{0,0}}
- सेट करें:
layer.frame = CGPathGetBoundingBox(layer.path)
फ़्रेम अब सही है, लेकिन पथ अब ऑफसेट है -बदल रहा है
layer.bounds = CGPathGetBoundingBox(layer.path)
- ... यह सब पागल हो जाता है:पथ का कारण बनता है प्रभावी रूप से एक अतिरिक्त
(x,y)
पिक्सल सेट स्थानांतरित कर दिया जाए। कुछ भी समझ में आता है
layer.position = CGPathGetBoundingBox(layer.path).origin
- ... कोई पासा नहीं कर इसे ठीक करने का प्रयास करें; अभी भी पागल
एक बात मैं काम किया है कि कोशिश की है, लेकिन समस्याओं कहीं और का कारण बनता है:
संपादित करें: इस जैसे ही आप स्क्रीन ऑटो बारी बारी के रूप में टूट जाता है। मेरा अनुमान है: ऐप्पल के ऑटो-रोटेट को "ट्रांसफॉर्म" संपत्ति के नियंत्रण की आवश्यकता है।
- एक
CAShapeLayer
- एक
CGPath
बनाएँ, परत की फ्रेम बनाएं परत - में जोड़ने देखें - क्या यह
{{0,0},{0,0}}
- सेट है:
layer.frame = CGPathGetBoundingBox(layer.path)
- सेट:
layer.transform = CGAffineTransformMakeTranslation(CGPathGetBoundingBox(layer.path).origin.x * -1, // same for y-coord: set it to "-1 * the path's origin
यह काम करता है, लेकिन ... बहुत से तृतीय पक्ष कोड मानते हैं कि प्रारंभिक परिवर्तन एफ या CALayer
पहचान है।
यह मुश्किल नहीं होना चाहिए! निश्चित रूप से कुछ ऐसा है जो मैं गलत कर रहा हूं?
(मेरे पास एक सुझाव था: "हर बार जब आप पथ जोड़ते हैं, तो -1 * (top-left-point.x, top-left-point.y)
द्वारा सभी बिंदुओं को स्थानांतरित करने के लिए मैन्युअल रूप से एक कस्टम फ़ंक्शन चलाएं"।दोबारा, यह काम करता है - लेकिन यह हास्यास्पद रूप से जटिल है)
क्या आपको कभी इसका समाधान मिला? – jannej
अभी तक नहीं। मैं वर्तमान में प्रश्न से कामकाज का उपयोग कर रहा हूं। यह धीमा है और इसे बनाए रखने के लिए दर्द है। मुझे लगता है कि समस्या ऐप्पल के कोड में एक बग है, शायद? – Adam
एक छोटा सा परिशिष्ट: मुझे अंततः पता चला कि ".frame" ऐप्पल द्वारा असमर्थित है। यह विचित्र है, क्योंकि यह हर जगह उपयोग किया जाता है - लेकिन यदि आप दस्तावेज़ों और/या ऐप्पल मेलिंग सूचियों में काफी गहराई से खुदाई करते हैं, तो आप ऐप्पल इंजीनियरों के नोट्स खोजते हैं कि यह काम करने का इरादा नहीं है और वे इसके साथ बग ठीक नहीं करेंगे। आपको उम्मीद है कि/सब कुछ के लिए बाउंड्स का उपयोग करने की आवश्यकता है, और "readonly" के रूप में .frame का इलाज करें। तो यह विशेष रूप से विडंबना है कि इस मामले में सेटिंग। फ्रेम "लगभग काम करता है", जहां सेटिंग। बाउंड "कभी काम नहीं करता" :) – Adam