UIMage : 애스펙트 핏과 센터 표시
프로그래밍 방식으로 선언된 이미지 뷰가 있고, 그 이미지를 프로그래밍 방식으로 설정하고 있습니다.
그러나 이미지를 가로 맞춤과 세로 맞춤 모두 이미지 보기에 맞게 설정할 수 없습니다.
즉, 다음과 같은 이미지를 원합니다.
- 이미지가 큰 경우는, 종횡에 맞추어 축소합니다.
- 이미지가 작을 경우 가운데에 위치하지만 확대하지는 않습니다.
어떻게 구하지?
솔루션 붙여넣기:
@manohar의 말대로
imageView.contentMode = UIViewContentModeCenter;
if (imageView.bounds.size.width > ((UIImage*)imagesArray[i]).size.width && imageView.bounds.size.height > ((UIImage*)imagesArray[i]).size.height) {
imageView.contentMode = UIViewContentModeScaleAspectFit;
}
나의 문제를 해결했다.
빠른 언어로 다음과 같이 UIImage 뷰의 콘텐츠 모드를 설정할 수 있습니다.
let newImgThumb = UIImageView(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
newImgThumb.contentMode = .scaleAspectFit
재빠르다
yourImageView.contentMode = .center
다음 옵션을 사용하여 이미지를 배치할 수 있습니다.
scaleToFill
scaleAspectFit
// 고정된 측면에 맞게 콘텐츠를 축소합니다.나머지는 투명합니다.redraw
// 경계 변경 시 다시 그리기(콜 -setNeedsDisplay)center
// 내용은 동일한 크기로 유지됩니다.위치 조정.top
bottom
left
right
topLeft
topRight
bottomLeft
bottomRight
갱신된 답변
2014년에 처음 이 질문에 대답했을 때 작은 이미지의 경우 이미지 크기를 늘리지 않아도 됩니다.(문제는 2015년에 편집되었습니다.)이러한 요건이 있는 경우 이미지의 크기와 이미지의 크기를 비교하여 다음 중 하나를 사용해야 합니다.UIViewContentModeCenter
(imageView보다 작은 이미지의 경우) 또는UIViewContentModeScaleAspectFit
다른 모든 경우에.
원답
imageView의 contentMode 설정UIViewContentModeScaleAspectFit
충분했어요.화상의 중심도 맞추고 있는 것 같습니다.왜 다른 사람들이 이미지에 입각한 논리를 쓰는지 모르겠다.iOS의 애스펙트 핏과 센터도 참조해 주세요.
저는 이 문제를 이렇게 풀었어요.
- set Image to
UIImageView
(와 함께)UIViewContentModeScaleAspectFit
) - image Size 가져오기
(CGSize imageSize = imageView.image.size)
UIImageView
크기를 변경합니다.[imageView sizeThatFits:imageSize]
- 원하는 위치로 이동합니다.
UIView를 맨 위 중앙에 두고 싶었어요.UICollectionViewCell
그래서 이 기능을 사용했습니다.
- (void)setImageToCenter:(UIImageView *)imageView
{
CGSize imageSize = imageView.image.size;
[imageView sizeThatFits:imageSize];
CGPoint imageViewCenter = imageView.center;
imageViewCenter.x = CGRectGetMidX(self.contentView.frame);
[imageView setCenter:imageViewCenter];
}
저는 좋아요.
영상 보기의 컨텐츠 모드를 UIViewContentModeScaleAspectFill로 설정하면 이 작업을 수행할 수 있습니다.
그런 다음 다음 메서드를 사용하여 크기 조정된 UI 이미지 개체를 가져옵니다.
- (UIImage*)setProfileImage:(UIImage *)imageToResize onImageView:(UIImageView *)imageView
{
CGFloat width = imageToResize.size.width;
CGFloat height = imageToResize.size.height;
float scaleFactor;
if(width > height)
{
scaleFactor = imageView.frame.size.height / height;
}
else
{
scaleFactor = imageView.frame.size.width / width;
}
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), NO, 0.0);
[imageToResize drawInRect:CGRectMake(0, 0, width * scaleFactor, height * scaleFactor)];
UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resizedImage;
}
여기서 편집(Swift 버전)
func setProfileImage(imageToResize: UIImage, onImageView: UIImageView) -> UIImage
{
let width = imageToResize.size.width
let height = imageToResize.size.height
var scaleFactor: CGFloat
if(width > height)
{
scaleFactor = onImageView.frame.size.height / height;
}
else
{
scaleFactor = onImageView.frame.size.width / width;
}
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width * scaleFactor, height * scaleFactor), false, 0.0)
imageToResize.drawInRect(CGRectMake(0, 0, width * scaleFactor, height * scaleFactor))
let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return resizedImage;
}
이 서브클래스는 이미지가 뷰보다 크지 않으면 중앙을 사용하고, 그렇지 않으면 축소합니다.이게 도움이 될 것 같아서UIImageView
사이즈가 바뀝니다.
표시되는 이미지는 큰 사이즈의 표시보다 작지만 작은 사이즈의 표시보다 큽니다.축소만 해줬으면 좋겠는데, 상향은 안 돼.
class CenterScaleToFitImageView: UIImageView {
override var bounds: CGRect {
didSet {
adjustContentMode()
}
}
override var image: UIImage? {
didSet {
adjustContentMode()
}
}
func adjustContentMode() {
guard let image = image else {
return
}
if image.size.width > bounds.size.width ||
image.size.height > bounds.size.height {
contentMode = .ScaleAspectFit
} else {
contentMode = .Center
}
}
}
let bannerImageView = UIImageView();
bannerImageView.contentMode = .ScaleAspectFit;
bannerImageView.frame = CGRectMake(cftX, cftY, ViewWidth, scrollHeight);
[your_imageview setContentMode:UIViewContentModeCenter];
UIIMAGE 크기를 변경하고자 하는 분들을 위해,
@implementation UIImage (Resize)
- (UIImage *)scaledToSize:(CGSize)size
{
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
[self drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
- (UIImage *)aspectFitToSize:(CGSize)size
{
CGFloat aspect = self.size.width / self.size.height;
if (size.width / aspect <= size.height)
{
return [self scaledToSize:CGSizeMake(size.width, size.width / aspect)];
} else {
return [self scaledToSize:CGSizeMake(size.height * aspect, size.height)];
}
}
- (UIImage *)aspectFillToSize:(CGSize)size
{
CGFloat imgAspect = self.size.width / self.size.height;
CGFloat sizeAspect = size.width/size.height;
CGSize scaledSize;
if (sizeAspect > imgAspect) { // increase width, crop height
scaledSize = CGSizeMake(size.width, size.width / imgAspect);
} else { // increase height, crop width
scaledSize = CGSizeMake(size.height * imgAspect, size.height);
}
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClipToRect(context, CGRectMake(0, 0, size.width, size.height));
[self drawInRect:CGRectMake(0.0f, 0.0f, scaledSize.width, scaledSize.height)];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
@end
언급URL : https://stackoverflow.com/questions/15499376/uiimageview-aspect-fit-and-center
'code' 카테고리의 다른 글
세로 구분 기호를 추가하는 방법 (0) | 2023.04.23 |
---|---|
msdeploy를 통한 Azure Web App 전개 오류 - ERROR_INSUFFICE_A CCESS_TO_SITE_FOLDER (0) | 2023.04.23 |
조건부 고유 제약 (0) | 2023.04.23 |
iOS에서 Objective-C의 유형 (0) | 2023.04.23 |
iOS 7에서 내비게이션 바 색상을 변경하는 방법 (0) | 2023.04.23 |