Tôi chỉ cấu hình một CABasicAnimation
cho tài sản shadowPath và điều này khiến tôi tò mò:Cầu đúc yêu cầu, cảnh báo không phù hợp trong khi cố gắng sử dụng CGPathRef
shadowAnimation.toValue = (id)newShadowPath.CGPath;
[lưu ý: shadowAnimation được một đối tượng CABasicAnimation
và newShadowPath
là một UIBezierPath
đối tượng]
tác phẩm này và không có lỗi/cảnh báo nào hiển thị trong Xcode. Tuy nhiên, nếu tôi viết rằng như vậy:
CGPathRef test = newShadowPath.CGPath;
shadowAnimation.toValue = (id)test;
này sẽ không biên dịch, ném thông điệp cảnh báo này:
Cast of C pointer type 'CGPathRef' (aka 'const struct CGPath *') to Objective-C pointer type 'id' requires a bridged cast
Vì vậy, nó đòi hỏi tôi phải gõ nó thích:
shadowAnimation.toValue = (__bridge id)test;
Bây giờ tại sao cái này rất? Tại sao tôi không gặp lỗi tương tự trong ví dụ ban đầu khi tôi chỉ sử dụng (id) newShadowPath.CGPath; ? Nó sẽ được chính xác để đặt __bridge
cast có quá bất kể Xcode không phát hiện bất kỳ vấn đề? Hay tôi bỏ lỡ sự khác biệt ở đây là gì?
wow, cảm ơn vì đã nỗ lực để phân tích điều này. Tôi đã chấp nhận điều này như là câu trả lời đúng bởi vì nó đi vào chiều dài lớn này để giải thích chính xác những gì đang xảy ra. –