właśnie Konfigurowanie CABasicAnimation
za mienie shadowPath i to mnie ciekawi:Most odlew wymagane, niespójne ostrzeżenie podczas próby użycia CGPathRef
shadowAnimation.toValue = (id)newShadowPath.CGPath;
[uwaga: shadowAnimation jest CABasicAnimation
przedmiot i newShadowPath
jest UIBezierPath
obiekt]
to działa i nie występuje żaden błąd/ostrzeżenie w Xcode. Jednakże, jeśli napiszę, że tak:
CGPathRef test = newShadowPath.CGPath;
shadowAnimation.toValue = (id)test;
Nie będzie to skompilować, rzucając ten komunikat ostrzegawczy:
Cast of C pointer type 'CGPathRef' (aka 'const struct CGPath *') to Objective-C pointer type 'id' requires a bridged cast
Więc to wymaga ode mnie, aby wpisać to lubią:
shadowAnimation.toValue = (__bridge id)test;
teraz dlaczego tak jest? Dlaczego nie otrzymam tego samego błędu w początkowym przykładzie, gdy używam tylko (id) newShadowPath.CGPath; ? Czy to byłoby właściwe, aby umieścić tam również __bridge
, niezależnie od tego, czy Xcode nie wykryje żadnych problemów? Czy może brakuje mi tu jakiej różnicy?
Wow, dziękuję za podjęcie się takiego wysiłku, aby to przeanalizować. Ponownie uznałem to za poprawną odpowiedź, ponieważ jest tak wielka, aby dokładnie wyjaśnić, co się dzieje. –