내 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에서 예제 프로젝트를 확인할 수 있습니다.
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/ –