내 IOS 응용 프로그램에서 9 패치 이미지를 사용하고 싶습니다. 가능한가?IOS에서 9 패치 이미지를 사용하는 방법은 무엇입니까?
답변
UIImage의 방법 resizableImageWithCapInsets:(UIEdgeInsets)capInsets
을 살펴보십시오.
그게 9 패치가 아닙니다. –
당신이 맞습니다. resizableImageWithCapInsets : 좋습니다. 그러나 9 패치가 아닙니다. 이미지 크기 조정 방법과 관련된 몇 가지 규칙을 적용 할 수 있습니다. 그러나 그것은 9 패치를 복제하지 않을 것입니다. – bturner
예 위의 대답은 정확하지만 9 패치는 그보다 더 좋은 옵션입니다 –
가장 가능성이 결과는 https://github.com/andylanddev/Tortuga22-NinePatch 9 패치 라이브러리가 이미 울부 짖는 방법을 resizableImageWithCapInsets 사용하고 있습니다 : (UIEdgeInsets) 인 세트를
당신은이 간단한 구현을 시도 할 수 있습니다 : 이 https://github.com/shiami/SWNinePatchImageFactory
개념은 간단하고
이 기법은 9 패치 PNG 이미지를 iOS 호환 가능하고 크기를 조정할 수있는 UIImage 객체로 변환하는 것입니다. 자세한 내용은 UIImage의 resizableImageWithCapInsets : (UIEdgeInsets) 인세 트를 참조하십시오. 그래서 패치 마커의 한 세그먼트 만 가로 및 세로로 늘릴 수 있습니다.
+ (UIImage*)createResizableImageFromNinePatchImage:(UIImage*)ninePatchImage
{
NSArray* rgbaImage = [self getRGBAsFromImage:ninePatchImage atX:0 andY:0 count:ninePatchImage.size.width * ninePatchImage.size.height];
NSArray* topBarRgba = [rgbaImage subarrayWithRange:NSMakeRange(1, ninePatchImage.size.width - 2)];
NSMutableArray* leftBarRgba = [NSMutableArray arrayWithCapacity:0];
int count = [rgbaImage count];
for (int i = 0; i < count; i += ninePatchImage.size.width) {
[leftBarRgba addObject:rgbaImage[i]];
}
int top = -1, left = -1, bottom = -1, right = -1;
count = [topBarRgba count];
for (int i = 0; i <= count - 1; i++) {
NSArray* aColor = topBarRgba[i];
if ([aColor[3] floatValue] == 1) {
left = i;
break;
}
}
NSAssert(left != -1, @"The 9-patch PNG format is not correct.");
for (int i = count - 1; i >= 0; i--) {
NSArray* aColor = topBarRgba[i];
if ([aColor[3] floatValue] == 1) {
right = i;
break;
}
}
NSAssert(right != -1, @"The 9-patch PNG format is not correct.");
for (int i = left + 1; i <= right - 1; i++) {
NSArray* aColor = topBarRgba[i];
if ([aColor[3] floatValue] < 1) {
NSAssert(NO, @"The 9-patch PNG format is not support.");
}
}
count = [leftBarRgba count];
for (int i = 0; i <= count - 1; i++) {
NSArray* aColor = leftBarRgba[i];
if ([aColor[3] floatValue] == 1) {
top = i;
break;
}
}
NSAssert(top != -1, @"The 9-patch PNG format is not correct.");
for (int i = count - 1; i >= 0; i--) {
NSArray* aColor = leftBarRgba[i];
if ([aColor[3] floatValue] == 1) {
bottom = i;
break;
}
}
NSAssert(bottom != -1, @"The 9-patch PNG format is not correct.");
for (int i = top + 1; i <= bottom - 1; i++) {
NSArray* aColor = leftBarRgba[i];
if ([aColor[3] floatValue] == 0) {
NSAssert(NO, @"The 9-patch PNG format is not support.");
}
}
UIImage* cropImage = [ninePatchImage crop:CGRectMake(1, 1, ninePatchImage.size.width - 2, ninePatchImage.size.height - 2)];
return [cropImage resizableImageWithCapInsets:UIEdgeInsetsMake(top, left, bottom, right)];
}
SWNinePatchImageView는 펜촉 또는 스토리 보드 사용법도 제공합니다. repo에서 예제 프로젝트를 확인할 수 있습니다.
- 1. 9 개의 패치 이미지를 수평으로 만 확장하는 방법은 무엇입니까?
- 2. RemoteViews를 사용하는 위젯의 9 패치 비트 맵
- 3. 안드로이드 - 9 패치
- 4. Android 9 패치 배치
- 5. Android : 9 패치 이미지 - 잘못된 패치
- 6. 9 패치 당김
- 7. 9 패치 PNG 조정 센터
- 8. 9 패치 이미지의 올바른 사용
- 9. 9 패치 이미지가 작동하지 않습니다.
- 10. 9 패치 화상 여기
- 11. 9 패치 축소 문제
- 12. 동적으로 9 패치 배경을 설정하십시오
- 13. Android 9 패치 이미지 오류
- 14. 9 패치 이미지 및 라이브러리
- 15. 9 패치 이미지를 어떻게 색칠 할 수 있습니까?
- 16. 9 패치 행 배경이 Android에서 불규칙하게 나타납니다.
- 17. 배경으로 9 패치 이미지에 문제가 있습니다.
- 18. 9 패치 이미지가 Android에서 작동하도록 앱을 중지합니다.
- 19. 9 개의 패치 라인이 표시됩니다.
- 20. android 9 패치 drawable xml
- 21. 안드로이드 seekbar는 9 패치 이미지를 사용하여 사용자 정의 스타일을 설정했습니다.
- 22. iOS에서 NSStreamNetworkServiceTypeBackground를 사용하는 방법은 무엇입니까?
- 23. 9 패치 이미지 슬라이싱, 패딩 문제
- 24. 9 패치를 보여주는 패치 - 인식되지 않음
- 25. 9- 패치 단추가 텍스트를 표시하지 않습니다.
- 26. OpenGL 및 9 패치 드로어 블
- 27. 내 9 패치 이미지가 작동을 멈췄습니다.
- 28. 9- 패치 이미지가 QVGA에서 세로로 반복되지 않음
- 29. 9 Windows 7 x64에서 이미지 패치
- 30. Svg 버튼과 9 개의 패치 버튼
Google ban :)? 1) 그래서 http://stackoverflow.com/questions/5570818/android-nine-patch-equivalent-for-other-platforms 2) Tortuga http://maniacdev.com/2011/07/open-source-library-and -guide-for-nine-nine-image-support-ios-platforms/ –