Я схожу с ума, пытаясь объединить два UIImageView.
Ситуация:
- фоновый UIImageView
(userPhotoImageView)
- наложение
UIImageView (productPhotoImageView)
которые могут быть растянуты, зажаты и
повернутый
Я вызываю свою функцию в UIImages, но я могу взять координаты и новый растянутый размер из содержащего их UIImageView (они синтезированы в моем классе)
- (UIImage *)mergeImage:(UIImage *)bottomImg withImage:(UIImage *)topImg;
Возможно, самым простым способом было бы визуализировать слой верхнего UIImageView в новом CGContextRef следующим образом:
[bottomImg drawInRect:CGRectMake(0, 0, bottomImg.size.width, bottomImg.size.height)];
[productPhotoImageView.layer renderInContext:ctx];
Но таким образом я теряю эффект вращения, ранее примененный жестами.
Второй способ - попытаться применить AffineTransformation к UIImage, чтобы воспроизвести эффекты GestureEffects, а затем нарисовать его в следующем контексте:
UIImage * scaledTopImg = [topImg imageByScalingProportionallyToSize:productPhotoView.frame.size];
UIImage * rotatedScaledTopImg = [scaledTopImg imageRotatedByDegrees:ANGLE];
[rotatedScaledTopImg drawAtPoint:CGPointMake(productPhotoView.frame.origin.x, productPhotoView.frame.origin.y)];
Проблема этого второго подхода заключается в том, что я не могу точно получить конечное количество градусов поворота (параметр ANGLE, который должен быть указан в приведенном выше коде), так как пользователь начал взаимодействовать, это потому, что RotationGesture сбрасывается до 0 после применения, поэтому следующий обратный вызов является дельтой текущего вращения.
Конечно, самый простой способ - это первый, замораживать два UIImageViews, когда они отображаются в тот самый момент, но на самом деле я все еще не нашел, как это сделать.