Nice programing

UIImage가있는 UIBarButtonItem 항상 색조 iOS 7

nicepro 2020. 11. 22. 20:33
반응형

UIImage가있는 UIBarButtonItem 항상 색조 iOS 7


UIBarButtonItem포함 을 추가하려고 UIImage합니다 UIToolbar. 이미지가 계속해서 착색되고 원본 컬러 이미지로 표시 할 수 없습니다. 내가 원하는 것은 이미지를 그대로 표시하는 것입니다 UIBarButtonItem! iOS 7 전환 가이드의 지침에 따라 이미지 렌더링 모드를 UIImageRenderingModeAlwaysOriginal.

UIImage *image = [UIImage imageNamed:@"myImage.png"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

UIBarButtonItem *ratingImage = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleBordered target:nil action:nil];

[toolbar setItems:[NSArray arrayWithObjects:ratingImage, nil] animated:YES];

한 가지 주목할 점은 앱이로드 될 때 바로 내 앱의 기본 UIWindow에 대한 tintColor를 설정했다는 것입니다 ... 아마도 내 문제와 관련하여 중요하지 않지만 언급 할 것이라고 생각했습니다.


나는 이것을 알아 내기 위해 저녁을 보냈다. 솔루션에 매우 가까웠습니다. 트릭은 렌더링 모드로 UIImage를 인스턴스화하는 것입니다.

대신 :

 UIImage *image = [UIImage imageNamed:@"myImage.png"];
 image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

이 작업을 수행:

 UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

그리고 작동합니다!

제 경우에는 탐색 모음을 IB의 뷰 컨트롤러로 끌어와 BarButtonItem을 추가했습니다. 그러나 IB에서 항목에 이미지를 제공하지 마십시오. 다음을 수행하여 콘센트를 만들고 UIImage (위에서 만든 것처럼)를 할당합니다.

[myCustomBarButtonItem setImage:image];

이것이 당신을 위해 작동하기를 바랍니다.


UIImageRenderingModeAlwaysOriginal은 XCode의 Assets.xcassets "폴더"에서 이미지를 선택하고 "Render as"드롭 다운을 "Original image"로 설정하여 설정할 수도 있습니다.


Swift 2.1+의 경우 다음과 같습니다.

let image : UIImage? = UIImage(named:"myImage.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

업데이트 된 Swift 3

let image : UIImage? = UIImage(named:"myImage.png")!.withRenderingMode(.alwaysOriginal)

받아 들여진 대답은 괜찮지 만 UIBarButtonItem스토리 보드 나 xib에를 배치하면 다음과 같이 할 수 있습니다.

  • 이미지가있는 자산 카탈로그로 이동
  • 이미지 선택
  • 속성 검사기로 이동 (cmd-opt-4)
  • "Render As"를 "Original Image"로 설정하십시오.

이 이미지의 모든 인스턴스가 색조없이 표시되도록하려면이 작업을 수행하십시오 .

여기에 이미지 설명 입력


v7 미만의 iOS 버전에서 작동하도록하려면 다음을 수행해야 할 수 있습니다.

UIImage *image = [UIImage imageNamed:@"myImage.png"];
@try {
  image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
} @catch (NSException *exception) {
}

imageWithRenderingMode :는 iOS 7 메서드이므로 더 낮은 버전에서 사용하려고하면 예외가 발생합니다.

참고 URL : https://stackoverflow.com/questions/19372269/uibarbuttonitem-with-uiimage-always-tinted-ios-7

반응형