문제
나는 iPhone UI에 사용자 정의 버튼을 추가하는 과정에 있으며 Apple의 앱에서 유리처럼 보이게 만들고 싶습니다. 나는 기본 유리 이미지가 좋지만 원하는 각 색조에 대해 별도의 이미지를 가져 가기를 싫어합니다 (빨간색, 녹색, 파란색 등).
그레이 스케일 PNG를로드하고 원하는 색상으로 조정하는 방법이 있습니까? 더 좋은 점은 사용자 정의 이미지를 전혀로드하지 않고 Apple의 유리처럼 보이는 방법이 있습니까?
해결책
내가 아는 1 라이너 방법은 없지만 기본 그레이스 스케일 이미지를 가져 와서 단색으로 구성하여 원하는 효과를 얻을 수 있습니다. 핵심 그래픽 문서를 살펴보면 12 가지가 넘는 다른 합성 방법 (예 : 색상 화상)이 있음을 알 수 있으며 일부 조합은 원하는 효과를 생성 할 수 있습니다.
다른 팁
조금 늦었지만 나와 같은 누군가가 이런 종류의 정보를 검색하는 경우 : UISegmentedControl
단일 버튼으로로 설정하십시오 momentary
, 그것을 설정합니다 tintColor
. 이런 식으로, 당신이 색상이있는만큼 많은 PNG를 준비 할 필요가 없으며, 프레임 워크는 당신을 위해 모든 렌더링을 처리합니다.
예시:
UISegmentedControl *cancelButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Cancel"]];
[cancelButton setSegmentedControlStyle:UISegmentedControlStyleBar];
[cancelButton setTintColor:[UIColor colorWithRed:0.8 green:0.3 blue:0.3 alpha:1.0]];
[cancelButton setMomentary:YES];
[cancelButton addTarget:self action:@selector(didTapCancel:) forControlEvents:UIControlEventValueChanged];
[self addSubview:cancelButton];
[cancelButton release];
항상 우수한 "Cocoa with Love"사이트에는 샘플이 있습니다. Coregraphic에서 광택 그라디언트를 그리는 것
iPhone UI에 대해 잘 모르겠지만 단일 PNG를 사용하여 색상 변형 그래픽을 가질 수 있습니다.
즉,이 페이지의 로고 (왼쪽 상단).
이것을 사용하십시오 PNG
대체 텍스트 http://47degrees.com/images/logos/47_degrees.png
나는 당신이 유리가 되려면 착색으로 배경색 세트가 필요할 것이라고 가정합니다.
나는 이것을했고 그것은 아주 잘 작동합니다.
iOS : Greyscale PNG에 RGB 필터 적용
그러나 부정 행위입니다. 추가하고 있습니다. (예 : 각 픽셀의 빨간색 구성 요소), r_dest = r_src + r_tint
세밀한 제어를 원한다면 예를 들어 RGB 구성 요소를 평균하여 (적절한 가중치로) 평균 (적절한 가중치로)을 통해 각 픽셀의 그리스 스케일 값을 추출한 다음 색조 로이 값을 곱할 수 있으므로 결과 색상은 Greyscale (SR입니다. , sg, sb) * {tr, tg, tb}
이를 위해서는 메모리 덩어리를 생성 하고이 청크에 끌리는 비트 맵 컨텍스트를 만들고,이 컨텍스트에 이미지를 그리며, 안전 유지를 위해 전체 메모리 청크를 복사하고, 처리, 사본에서 데이터 가져 와서 원래 백업 저장소를 수정해야합니다. 원래 백업 스토어에서 이미지를 추출하고 할당 한 모든 것을 확보합니다.
RGBA 픽셀 바이트 데이터에서 uiimage를 재구성하는 문제
이 라이브러리는 당신을 위해 모든 것을 수행했으며, 가장 효율적인 경로는 아니지만 작업을 완료합니다. IIRC 그는 Calloc을 사용해야 할 때 Malloc을 사용합니다.
결국 연락처 편집보기에서 "Contact Delet Contact"버튼에 사용 된 렌더링과 밀접하게 일치하는 나만의 사용자 정의 버튼을 만들었습니다.
관심있는 사람들을 위해 Github에서 찾을 수 있습니다.