Я пытаюсь создать коллаж с помощью UIGraphicsBeginImageContext. Но обрезка определенного положения изображения и размещение imageView в правильном положении в представлении сводит меня с ума. Моя попытка до сих пор:
-(void) viewWillAppear:(BOOL)animated
{
[self noOfImages:2]; // no of images method used for how many image you want to show in the view. Currently I needed a collage imageView upto 3 images
}
-(void)noOfImages:(int)num
{
if (num==2)
{
UIImageView *One=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, containerView.frame.size.width, containerView.frame.size.height)];
[One setBackgroundColor:[UIColor grayColor]];
[One setImage:[UIImage imageNamed:@"1.jpg"]];
UIImageView *Two=[[UIImageView alloc] initWithFrame:CGRectMake(containerView.frame.size.width/2, 0, containerView.frame.size.width/2, containerView.frame.size.height)];
[Two setBackgroundColor:[UIColor grayColor]];
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg"];
UIImage *existingImage = [[UIImage alloc] initWithContentsOfFile:imagePath];
// Create new image context (retina safe)
UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 200), NO, [UIScreen mainScreen].scale);
// Create rect for image
CGRect rect = CGRectMake(1, 0, containerView.frame.size.width, containerView.frame.size.height);
// Draw the image into the rect
[existingImage drawInRect:rect];
// Saving the image, ending image context
UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[Two setImage:newImage];
[containerView addSubview:One];
[containerView addSubview:Two];
}
else if (num==3)
{
UIImageView *One=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, containerView.frame.size.width, containerView.frame.size.height)];
[One setBackgroundColor:[UIColor grayColor]];
[One setImage:[UIImage imageNamed:@"1.jpg"]];
UIImageView *Two=[[UIImageView alloc] initWithFrame:CGRectMake(containerView.frame.size.width/2, 0, containerView.frame.size.width/2, containerView.frame.size.height/2)];
[Two setBackgroundColor:[UIColor grayColor]];
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg"];
UIImage *existingImage = [[UIImage alloc] initWithContentsOfFile:imagePath];
// Create new image context (retina safe)
UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 200), NO, [UIScreen mainScreen].scale);
// Create rect for image
CGRect rect = CGRectMake(1, 0, containerView.frame.size.width, 200);
// Draw the image into the rect
[existingImage drawInRect:rect];
// Saving the image, ending image context
UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[Two setImage:newImage];
UIImageView *Three=[[UIImageView alloc] initWithFrame:CGRectMake(containerView.frame.size.width/2, containerView.frame.size.height/2, containerView.frame.size.width/2, containerView.frame.size.height/2)];
[Three setBackgroundColor:[UIColor grayColor]];
NSString *imagePath3 = [[NSBundle mainBundle] pathForResource:@"3" ofType:@"jpg"];
UIImage *existingImage3 = [[UIImage alloc] initWithContentsOfFile:imagePath3];
// Create new image context (retina safe)
UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 200), NO, [UIScreen mainScreen].scale);
// Create rect for image
CGRect rect3 = CGRectMake(1, 0, containerView.frame.size.width, 200);
// Draw the image into the rect
[existingImage3 drawInRect:rect3];
// Saving the image, ending image context
UIImage * newImage3 = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[Three setImage:newImage3];
[containerView addSubview:One];
[containerView addSubview:Two];
[containerView addSubview:Three];
}
}
Вывод для двух изображений должен быть:
Вывод для трех изображений должен быть:
На самом деле, когда я использую изображения 200x200, результаты верны. Но этот код не работает с динамическими изображениями, высота и ширина которых мне неизвестны. Также правое изображение немного растянуто и не находится в правильном положении для двух изображений. Позиция x изображения правой стороны должна начинаться от средней точки до конца, а не от начальной точки до середины. Я знаю, что мои расчеты неверны. Но невозможно установить правильную высоту, ширину, положение или кадрирование с помощью UIGraphicsBeginImageContextWithOptions или представления изображения, которое добавляется в качестве подпредставления.
Мне нужен вывод, например: для двух изображений - первая половина изображения слева, а другая половина изображения справа. для трех изображений - половина первого изображения слева, половина второго изображения вверху справа и половина третьего изображения внизу справа.