UIButton의 imageView를 어떻게 확장합니까?
를 사용하여 이미지로 "button"이라는 UIButton 인스턴스를 만들었습니다 [UIButton setImage:forState:]
. button.frame이 이미지 크기보다 큽니다.
이제이 버튼의 이미지를 더 작게 조정하겠습니다. button.imageView.frame
, button.imageView.bounds
및을 변경해 button.imageView.contentMode
보았지만 모두 효과가없는 것 같습니다.
누구든지 UIButton
의 imageView 크기를 조정할 수 있습니까 ?
나는 다음 UIButton
과 같이 만들었습니다 .
UIButton *button = [[UIButton alloc] init];
[button setImage:image forState:UIControlStateNormal];
다음과 같이 이미지 크기를 조정하려고했습니다.
button.imageView.contentMode = UIViewContentModeScaleAspectFit;
button.imageView.bounds = CGRectMake(0, 0, 70, 70);
이:
button.imageView.contentMode = UIViewContentModeScaleAspectFit;
button.imageView.frame = CGRectMake(0, 0, 70, 70);
원본 포스터의 경우 내가 찾은 해결책은 다음과 같습니다.
commentButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
이렇게하면 버튼이 수평으로 확장됩니다. 수직 설정도 있습니다.
하나를 알아내는 데 몇 시간이 걸렸 으므로 ( 부동산의 이름은 매우 직관적이지 않음) 공유 할 것이라고 생각했습니다.
비슷한 문제에 직면했습니다. 여기서 배경 이미지 (테두리가있는 이미지)와 사용자 지정 단추 용 이미지 (플래그)가 있습니다. 나는 깃발이 축소되고 중앙에 있기를 원했습니다. imageView의 속성을 변경하려고했지만 성공하지 못했고이 이미지를보고있었습니다.
실험하는 동안 다음을 시도했습니다.
button.imageEdgeInsets = UIEdgeInsetsMake(kTop,kLeft,kBottom,kRight)
다음과 같은 예상 결과를 얻었습니다.
XIB 파일의 구성을위한 추가 방법. 텍스트 또는 이미지가 UIButton에서 전체 채우기 크기 조정을 원하는 경우이 옵션을 선택할 수 있습니다. 코드도 마찬가지입니다.
UIButton *btn = [UIButton new];
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
btn.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
사용하다
button.contentMode = UIViewContentModeScaleToFill;
아니
button.imageView.contentMode = UIViewContentModeScaleAspectFit;
최신 정보:
@Chris가 언급했듯이
setImage : forState :에 대해이 작업을 수행하려면 다음을 수행하여 수평으로 크기를 조정해야합니다. myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
UIButton *button= [[UIButton alloc] initWithFrame:CGRectMake(0,0,70,70)];
button.buttonType = UIButtonTypeCustom;
UIImage *buttonImage = [UIImage imageNamed:@"image.png"];
UIImage *stretchableButtonImage = [buttonImage stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[button setBackgroundImage:stretchableButtonImage forState:UIControlStateNormal];
이 해결책을 찾았습니다.
1) 다음 메서드를 하위 클래스 UIButton
+ (id)buttonWithType:(UIButtonType)buttonType {
MyButton *toReturn = [super buttonWithType:buttonType];
toReturn.imageView.contentMode = UIViewContentModeScaleAspectFit;
return toReturn;
}
- (CGRect)imageRectForContentRect:(CGRect)contentRect {
return contentRect;
}
그리고 그것은 잘 작동합니다.
이상하게도 나를 위해 일한 유일한 콤보는 (iOS 5.1) ...
button.imageView.contentMode = UIViewContentModeScaleAspectFit;
과
[button setImage:newImage forState:UIControlStateNormal];
방금이 같은 문제가 발생했으며이 질문에 가능한 대답이 있습니다.
사용자 정의 UIButton 이미지가 Interface Builder에서 크기가 조정되지 않는 이유는 무엇입니까?
기본적으로 대신 backgroundimage 속성을 사용하면 크기가 조정됩니다.
그냥하세요 (디자인 또는 코드에서) :
디자인에서
- xib 또는 스토리 보드를 엽니 다.
- 선택 버튼
- Inside Attribute Inspector (오른쪽)> "컨트롤" 섹션에서> 수평 및 수직 모두에 대해 마지막 네 번째 옵션 을 선택 합니다.
[포인트 # 3의 경우 : 수평 및 수직 정렬을 UIControlContentHorizontalAlignmentFill and UIControlContentVericalAlignmentFill]
코드에서
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
button.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
이렇게하면 문제를 해결할 수 있습니다.
+ (UIImage*)resizedImage:(UIImage*)image
{
CGRect frame = CGRectMake(0, 0, 60, 60);
UIGraphicsBeginImageContext(frame.size);
[image drawInRect:frame];
UIImage* resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resizedImage;
}
여기서 읽은 후 방금 한 작은 테스트에서 setImage 또는 setBackgroundImage를 사용하는지 여부에 따라 모두 동일한 결과를 수행하고 이미지를 strech합니다.
//for setBackgroundImage
self.imageButton.contentMode = UIViewContentModeScaleAspectFill;
[self.imageButton setBackgroundImage:[UIImage imageNamed:@"imgFileName"] forState:UIControlStateNormal];
//for setImage
self.imageButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
self.imageButton.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
[self.imageButton setImage:[UIImage imageNamed:@"imgFileName"] forState:UIControlStateNormal];
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentFill;
button.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;
backgroundImage가 자동으로 크기 조정되기 때문에이 방법도 작동합니다.
[button setBackgroundImage:image forState:UIControlStateNormal];
_imageView에서 솔루션을 사용할 수는 없지만 a CGContextRef
를 사용 하여 해결할 수 있습니다. 를 사용하여 UIGraphicsGetCurrentContext
currentContextRef를 가져오고 currentContextRef에 이미지를 그린 다음 이미지의 크기를 조정하거나 회전하고 새 이미지를 만듭니다. 그러나 그것은 완벽하지 않습니다.
코드:
-(UIImage*) scaleAndRotateImage:(UIImage*)photoimage width:(CGFloat)bounds_width height:(CGFloat)bounds_height;
{
CGImageRef imgRef = photoimage.CGImage;
CGFloat width = CGImageGetWidth(imgRef);
CGFloat height = CGImageGetHeight(imgRef);
CGAffineTransform transform = CGAffineTransformIdentity;
CGRect bounds = CGRectMake(0, 0, width, height);
bounds.size.width = bounds_width;
bounds.size.height = bounds_height;
CGFloat scaleRatio = bounds.size.width / width;
CGFloat scaleRatioheight = bounds.size.height / height;
CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));
CGFloat boundHeight;
UIImageOrientation orient = photoimage.imageOrientation;
switch(orient)
{
case UIImageOrientationUp: //EXIF = 1
transform = CGAffineTransformIdentity;
break;
case UIImageOrientationUpMirrored: //EXIF = 2
transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);
transform = CGAffineTransformScale(transform, -1.0, 1.0);
break;
case UIImageOrientationDown: //EXIF = 3
transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationDownMirrored: //EXIF = 4
transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);
transform = CGAffineTransformScale(transform, 1.0, -1.0);
break;
case UIImageOrientationLeftMirrored: //EXIF = 5
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);
transform = CGAffineTransformScale(transform, -1.0, 1.0);
transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
break;
case UIImageOrientationLeft: //EXIF = 6
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);
transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
break;
case UIImageOrientationRightMirrored: //EXIF = 7
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeScale(-1.0, 1.0);
transform = CGAffineTransformRotate(transform, M_PI / 2.0);
break;
case UIImageOrientationRight: //EXIF = 8
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);
transform = CGAffineTransformRotate(transform, M_PI / 2.0);
break;
default:
[NSException raise:NSInternalInconsistencyException format:@"Invalid?image?orientation"];
break;
}
UIGraphicsBeginImageContext(bounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft)
{
CGContextScaleCTM(context, -scaleRatio, scaleRatioheight);
CGContextTranslateCTM(context, -height, 0);
}
else
{
CGContextScaleCTM(context, scaleRatio, -scaleRatioheight);
CGContextTranslateCTM(context, 0, -height);
}
CGContextConcatCTM(context, transform);
CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);
UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return imageCopy;
}
스토리 보드
Identity inspector – 의 런타임 속성 에서 특정 속성을 정의해야합니다 . 여기서 enum 위치에 상대적으로 값을 설정합니다 . 1은 scaleAspectFit을 의미 합니다 .imageView.contentModel
rawValue
UIViewContentMode
그리고 속성 관리자 에서 버튼의 정렬 :
다른 사람에게 도움이되기를 바랍니다.
Swift 3+
button.contentHorizontalAlignment = UIControlContentHorizontalAlignment.fill
button.contentVerticalAlignment = UIControlContentVerticalAlignment.fill
모든 UIButton에는 하나의 숨겨진 UIImageView가 있습니다. 따라서 아래와 같이 콘텐츠 모드를 설정해야합니다.
[[btn imageView] setContentMode: UIViewContentModeScaleAspectFit];
[btn setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
스크린 샷 왼쪽 하단에서 Stretching 속성을 볼 수 있습니다. 그것들을 사용해보십시오.
참고 URL : https://stackoverflow.com/questions/1957317/how-do-i-scale-a-uibuttons-imageview
'Program Tip' 카테고리의 다른 글
Navbar의 부트 스트랩 3.0 버튼 (0) | 2020.10.08 |
---|---|
Android 발리를 Android Studio로 가져 오기 (0) | 2020.10.08 |
활동에서 getSupportFragmentManager ()를 호출 할 수 없습니다. (0) | 2020.10.08 |
이온 프레임 워크 버전을 얻는 방법은 무엇입니까? (0) | 2020.10.08 |
작성기에서 [ReflectionException] 클래스 Fxp \ Composer \ AssetPlugin \ Repository \ NpmRepository가 존재하지 않습니다. (0) | 2020.10.08 |