2013-09-16 4 views
24

Xcode를 버전 4.6.2에서 5.0으로 업데이트했으며 Xcode 4.6.2에서 만든 프로젝트에서 메서드를 수행 한 후 갑자기 컴파일러 경고가 표시됩니다. Xcode의 이전 버전과 새 버전 모두에서 프로젝트를 다시 열어 보았습니다. 4.6.2에서도 동일한 방법으로 경고가 표시되지 않습니다. 여기 CGBitMapContextCreate 메서드로 인해 컴파일러 경고가 발생합니다. Xcode 5가 Xcode 4가 아닙니다.

은 엑스 코드 5.0에 경고를 이끌어 코드의 라인 :

CGContextRef context = CGBitmapContextCreate(NULL, frame.size.width * scaleFactor, frame.size.height * scaleFactor, 8, frame.size.width * scaleFactor * 4, colorSpace, kCGImageAlphaPremultipliedFirst); 

그리고 경고는 말한다 :

"Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGBitMapInfo' (aka 'enum CGBitMapInfo')" 

이 중단 경고로 표시되지 않습니다,하지만 난 아니다 의미를 해석하거나 해결 방법을 알기에 충분히 익숙합니다. 어떤 도움을 주셔서 감사합니다.

+14

당신은'(CGBitmapInfo) kCGImageAlphaPremultipliedFirst'와'kCGImageAlphaPremultipliedFirst'을 대체 할 수있다 : 즉 그것이 무엇인지 이후

올바른 해결책은 CGBitmapInfo에 알파 열거 값을 캐스팅하는 것입니다. – Rob

+2

참조 http://stackoverflow.com/questions/17245787/how-do-i-create-an-alpha-only-bitmap-context/17246355#17246355 – rmaddy

+0

감사합니다. – jac300

답변

37

kCGImageAlpha* 열거 형 값은 CGBitmapInfo의 처음 다섯 비트를 채우는 것으로 가정합니다. 그러나 C 유형 시스템에서는이를 표현할 수 없기 때문에 유형이 일치하지 않는다고 경고합니다.

(CGBitmapInfo)kCGImageAlphaPremultipliedFirst 
6

agoolden이 새로운 XCode 경고의 의도로 다양한 열거 형을 구성하고 연결하기 위해 이러한 열거 형에서 다른 마스크를 사용하도록 지시했을 수 있습니다. 그래서 대신 kCGImageAlphaPremultipliedFirst를 사용하는

(kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedFirst)

가 경고이 변경 후 사라집니다 사용합니다.

+0

이 표현식은 타입 정보 만 버리고 실수로 문제를 해결합니다 (int로 암시 적으로 캐스팅하여 CGBitmapInfo로 암시 적으로 캐스팅하여) (kCGmageAlphaPremultipliedFirst는 이미 kCGBitmapAlphaInfoMask에 설정된 비트만을 포함합니다). 따라서 로터리 방식으로 작동하는 정크 코드입니다. 캐스팅하고 싶다면 그냥 캐스팅하십시오. – nevyn

+3

@nevyn :'kCGBitmapAlphaInfoMask'를 포함하는 것이 인수의 값을 변경하지 않는다는 것이 맞지만, 메소드는'CGBitmapInfo'를 묻습니다. 따라서 열거 형의 값을 사용하는 것이 좋습니다. 이것은 필자가 생각하기에 문체 결정, 나 자신과 미래의 유지자들에게 내가 실제로 * 제공하는 것은'CGBitmapInfo '이고, 내가 포함 할 수있는 다른 비트 맵 정보가있다. 알파 정보에 대해서. 어쩌면 캐스트는 그 리마인더에 대해서도 잘 작동하지만,'CGBitmapInfo'의 값을 명시 적으로 사용하는 것보다 덜 계몽 적이라고 느낍니다. –

+0

그래, 그건 좋은 주장이야. 나는 내 downvote를 변경할 수 없다, 그것은 잠겨있어 : ( – nevyn