UIImageView 가로 세로 맞춤
프로그래밍 방식으로 선언 된 이미지보기가 있으며 이미지를 프로그래밍 방식으로 설정하고 있습니다.
그러나 이미지를 가로 세로에 맞추고 이미지를 중앙에 맞추도록 이미지를 설정할 수 없습니다.
다시 말해, 나는 이미지가 다음과 같이되기를 원한다.
- 이미지가 큰 경우 가로 세로 비율로 맞 춥니 다.
- 이미지가 작은 경우 가운데로 확대하지 않습니다.
어떻게 구할 수 있습니까?
솔루션을 붙여 넣기 만하면됩니다.
@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
업데이트 된 답변
2014 년에이 질문에 원래 답변했을 때 작은 이미지의 경우 이미지를 확대하지 않아도됩니다. (질문은 2015 년 에 편집되었습니다 .) 그러한 요구 사항이있는 경우 실제로 이미지의 크기를 imageView의 크기와 비교하고 UIViewContentModeCenter
(imageView보다 작은 이미지의 경우) 또는 UIViewContentModeScaleAspectFit
다른 모든 경우를 사용해야합니다. .
원래 답변
imageView의 contentMode를 설정하는 UIViewContentModeScaleAspectFit
것으로 충분했습니다. 이미지를 중앙에 배치하는 것 같습니다. 왜 다른 사람들이 이미지를 기반으로 논리를 사용하는지 잘 모르겠습니다. 이 질문도 참조하십시오 : iOS aspect fit and center
이 문제를 이렇게 해결했습니다.
- 행 setImage
UIImageView
(함께UIViewContentModeScaleAspectFit
) - 이미지 얻기
(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];
}
그것은 나를 위해 작동합니다.
빠른:
yourImageView.contentMode = .center
다음 옵션을 사용하여 이미지를 배치 할 수 있습니다.
scaleToFill
scaleAspectFit
// 내용이 고정 된 화면에 맞게 조정되었습니다. 나머지는 투명하다redraw
// 범위 변경시 다시 그리기 (calls -setNeedsDisplay)center
// 내용은 같은 크기로 유지됩니다. 위치 조정.top
bottom
left
right
topLeft
topRight
bottomLeft
bottomRight
이 서브 클래스는 이미지가 뷰보다 크지 않으면 가운데를 사용하고 그렇지 않으면 축소됩니다. 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
}
}
}
이미지보기의 컨텐츠 모드를 UIViewContentModeScaleAspectFill로 설정하여이를 달성 할 수 있습니다.
그런 다음 다음 메소드 메소드를 사용하여 크기가 조정 된 uiimage 객체를 가져 오십시오.
- (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;
}
let bannerImageView = UIImageView();
bannerImageView.contentMode = .ScaleAspectFit;
bannerImageView.frame = CGRectMake(cftX, cftY, ViewWidth, scrollHeight);
[your_imageview setContentMode:UIViewContentModeCenter];
For people looking for UIImage resizing,
@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
'Programing' 카테고리의 다른 글
SQLAlchemy에서 OR 사용 (0) | 2020.05.28 |
---|---|
C # 타이머와 같은 WPF 타이머 (0) | 2020.05.27 |
응용 프로그램을 배포 할 때“무제한 강도”JCE 정책 파일 설치를 피하는 방법은 무엇입니까? (0) | 2020.05.27 |
Angular 2 : 컴포넌트의 호스트 요소를 어떻게 스타일링합니까? (0) | 2020.05.27 |
자동 완성 플러그인 결과를 사용자 정의 형식으로 지정할 수 있습니까? (0) | 2020.05.27 |