Подтвердить что ты не робот

Изменение размера изображения в соответствии с UIImageView

Я очень новичок в объективе c, и я просто понимаю. Я хочу сделать что-то действительно простое, но это оказывается довольно сложной задачей:

Я пытаюсь отобразить изображение в UIImageView. Изображение, которое я показываю, велико, и я хочу, чтобы оно уменьшалось до UIImageView. Я попытался установить режим просмотра AspectFit, но изображение будет отображаться в исходном размере и обрезается с помощью UIImageView. Мой код ниже:

- (void)changeImages
{
    UIImage* img11 = nil;

    img11 = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"dog" ofType:@"jpeg"]];

    u11.contentMode = UIViewContentModeScaleAspectFit;
    u11.image = img11;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self changeImages];
}

Может ли кто-нибудь пролить свет на это, пожалуйста?

Спасибо!

4b9b3361

Ответ 1

Привет, я бы попробовал это...

- (void)changeImages
{
    UIImage *img11 = [UIImage [email protected]"dog.jpeg"];

    u11.contentMode = UIViewContentModeScaleAspectFit;
    u11.clipsToBounds = YES;
    [u11 setImage:img11];
}

- (void)viewWillAppear:animated
{
    [super viewWillAppear:animated];

    [self changeImages];
}

Это масштабирует изображение (вверх или вниз) так, чтобы оно находилось внутри изображения. Наличие клиповToBounds не требуется, но будет останавливать отображение изображения за пределами рамки вашего изображения.

НТН.

Ответ 2

Добавьте в свой UIViewController.m:

-(UIImage *)resizeImage:(UIImage *)image imageSize:(CGSize)size
{
    UIGraphicsBeginImageContext(size);
    [image drawInRect:CGRectMake(0,0,size.width,size.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    // here is the scaled image which has been changed to the size specified
    UIGraphicsEndImageContext();
    return newImage;
}

Использование:

UIImage *image = [UIImage imageNamed:@"image.png"];
CGSize size = CGSizeMake(50, 63); // set the width and height 
UIImage *resizedImage = [self resizeImage:image imageSize:size];

Надеюсь, это поможет.

Ответ 3

CGSize size=CGSizeMake(79, 84);//set the width and height
UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0,0,size.width,size.height)];
UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
//here is the scaled image which has been changed to the size specified
UIGraphicsEndImageContext();

Это работает точно и не забудьте импортировать QuartzCore FrameWork..

У вас есть счастливое кодирование (^ _ ^)....

Ответ 4

Вы также можете установить View: Mode to Aspect Fit в инспекторе атрибутов в построителе интерфейсов

Ответ 5

Я сделал следующее, и это помогло измените режим на "аспект заполнения" со значения по умолчанию "Масштаб для заполнения"

и добавьте строку кода следующим образом (я сделал это в конфигурации ячейки):

cell.photo.clipsToBounds = true

Ответ 6

Я знаю, что это старо, но я хотел добавить ответ, основанный на лекции 11 в Стэнфорде 193p 2017 года (около 18:45), и для всех, кто смотрит быстро, так как это первый результат поиска, который появился для меня.

По сути, создайте подкласс UIView и сделайте так, чтобы он выглядел следующим образом:

class U11: UIView {
    var myImage: UIImage? { didSet { setNeedsDisplay() }}
    override func draw(_ rect: CGRect) {
        myImage?.draw(in: bounds)
    }
}

Затем установите изображение с помощью:

func changeImage() {
    if let img11 = UIImage(named: "dog.jpeg"){
            u11.myImage = img11
    }
}

Это очень просто, и изображение занимает все пространство внутри границ представлений.