프로그래밍 방식으로 선언 된 이미지보기가 있으며 이미지를 프로그래밍 방식으로 설정하고 있습니다.
그러나 이미지를 가로 세로에 맞추고 이미지를 중앙에 맞추도록 이미지를 설정할 수 없습니다.
다시 말해, 나는 이미지가 다음과 같이되기를 원한다.
- 이미지가 큰 경우 가로 세로 비율로 맞 춥니 다.
- 이미지가 작은 경우 가운데로 확대하지 않습니다.
어떻게 구할 수 있습니까?
프로그래밍 방식으로 선언 된 이미지보기가 있으며 이미지를 프로그래밍 방식으로 설정하고 있습니다.
그러나 이미지를 가로 세로에 맞추고 이미지를 중앙에 맞추도록 이미지를 설정할 수 없습니다.
다시 말해, 나는 이미지가 다음과 같이되기를 원한다.
어떻게 구할 수 있습니까?
답변:
솔루션을 붙여 넣기 만하면됩니다.
@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;
}
내 문제를 해결했다
CGRectContainsRect(imageView.bounds, {CGPointZero, image.size})
CGSize imageSize = ((UIImage*)imagesArray[i]).size;
, CGSize viewSize = imageView.bounds.size
, if (viewSize.width > imageSize.width && viewSize.height > imageSize.height) {
.
yourImageView.contentMode = .center
다음 옵션을 사용하여 이미지를 배치 할 수 있습니다.
scaleToFill
scaleAspectFit
// 내용이 고정 된 화면에 맞게 조정되었습니다. 나머지는 투명하다redraw
// 범위 변경시 다시 그리기 (calls -setNeedsDisplay)center
// 내용은 같은 크기로 유지됩니다. 위치 조정.top
bottom
left
right
topLeft
topRight
bottomLeft
bottomRight
업데이트 된 답변
2014 년에이 질문에 처음 대답했을 때 작은 이미지의 경우 이미지를 확대하지 않아도됩니다. (질문은 2015 년 에 편집되었습니다 .) 그러한 요구 사항이있는 경우 실제로 이미지의 크기를 imageView의 크기와 비교하고 UIViewContentModeCenter
(imageView보다 작은 이미지의 경우) 또는 UIViewContentModeScaleAspectFit
다른 모든 경우를 사용해야합니다. .
원래 답변
imageView의 contentMode를 설정하는 UIViewContentModeScaleAspectFit
것으로 충분했습니다. 이미지도 중앙에있는 것 같습니다. 왜 다른 사람들이 이미지를 기반으로 논리를 사용하는지 잘 모르겠습니다. 이 질문도 참조하십시오 : iOS aspect fit and center
이 문제를 이렇게 해결했습니다.
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];
}
그것은 나를 위해 작동합니다.
이 서브 클래스는 이미지가 뷰보다 크지 않으면 가운데를 사용하고 그렇지 않으면 축소됩니다. 나는 이것이 유용한 것을 발견했다.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;
}
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