मैं सिर्फ shadowPath संपत्ति के लिए एक CABasicAnimation
को विन्यस्त किया गया था का उपयोग करने की कोशिश कर रहा है और यह मुझे उत्सुक बनाया:ब्रिज आवश्यक कलाकारों, असंगत चेतावनी जबकि CGPathRef
shadowAnimation.toValue = (id)newShadowPath.CGPath;
[ध्यान दें: एक CABasicAnimation
वस्तु और newShadowPath
एक UIBezierPath
है shadowAnimation है ऑब्जेक्ट]
यह काम करता है और एक्सकोड में कोई त्रुटि/चेतावनी दिखाई नहीं दे रही है। लेकिन अगर मैं लिखने कि इतने की तरह:
CGPathRef test = newShadowPath.CGPath;
shadowAnimation.toValue = (id)test;
यह संकलन नहीं होगा यह चेतावनी संदेश फेंकने:
Cast of C pointer type 'CGPathRef' (aka 'const struct CGPath *') to Objective-C pointer type 'id' requires a bridged cast
तो यह मेरे टाइप करने के लिए की आवश्यकता है इसे पसंद:
shadowAnimation.toValue = (__bridge id)test;
अब ऐसा क्यों है? मुझे प्रारंभिक उदाहरण में एक ही त्रुटि क्यों नहीं मिलती है जब मैं केवल (आईडी) newShadowPath.CGPath का उपयोग करता हूं; ? क्या __bridge
जगह पर भी डालना सही होगा, चाहे एक्सकोड किसी भी समस्या का पता नहीं लगाए? या क्या मुझे याद आ रहा है कि यहां क्या अंतर है?
वाह, इसका विश्लेषण करने के लिए इस तरह के प्रयास में जाने के लिए धन्यवाद। मैंने इसे सही उत्तर के रूप में फिर से स्वीकार कर लिया क्योंकि यह इस महान लंबाई में जाता है कि यह स्पष्ट करने के लिए कि क्या हो रहा है। –