Я просто Настройкой CABasicAnimation
для shadowPath собственности, и это сделало меня любопытным:моста литой требуется, противоречивое предупреждение при попытке использовать CGPathRef
shadowAnimation.toValue = (id)newShadowPath.CGPath;
[Примечание: shadowAnimation приведен CABasicAnimation
объекта и newShadowPath
является UIBezierPath
объект]
это работает, и никаких ошибок/предупреждений не видно в Xcode. Однако, если я пишу, что как так:
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;
сейчас почему это так? Почему бы мне не получить ту же ошибку в первом примере, когда я использую только (id) newShadowPath.CGPath; ? Правильно ли было бы размещать __bridge
, вне зависимости от того, Xcode не обнаружил никаких проблем? Или я не понимаю, в чем тут разница?
Вау, спасибо за то, что вы пытаетесь проанализировать это. Я повторил это как правильный ответ, потому что он идет в эту большую длину, чтобы точно объяснить, что происходит. –