У меня есть представление UIImage, которое настроено с использованием AutoLayout и ограничений. Я подгоняю изображение к изображению с помощьюУстановите UIImageView на UIImage
self.selectPhoto.contentMode = UIViewContentModeScaleAspectFit;
NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:self.topLayoutGuide attribute:NSLayoutAttributeBottom relatedBy:0 toItem:self.selectPhoto attribute:NSLayoutAttributeTop multiplier:1 constant:-10];
NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:self.selectPhoto attribute:NSLayoutAttributeBottom relatedBy:0 toItem:self.caption attribute:NSLayoutAttributeTop multiplier:1 constant:-35];
[self.view addConstraint:topConstraint];
[self.view addConstraint:bottomConstraint];
self.selectPhoto.image= existingImage;
Это прекрасно работает. Поскольку UIImageView настроен с использованием AutoLayout, а UIImage отображается с использованием Aspect Fit, я не знаю точный кадр изображения. Я хочу, чтобы верхний левый угол изображения был на 0,0 в представлении изображения, потому что у меня есть еще меньшее изображение, которое пользователь может перемещать поверх него.
Например: из-за ориентации изображения водопада верхний левый угол 0,23ish в UIImageView. Когда высота изображения> ширина изображения, начало координат (изображения) составляет 66,0. Это проблема, потому что я хочу затем нарисовать пользовательский контекст обоих изображений и сохранить как новое изображение. Я не могу этого сделать, потому что я не знаю, где изображение 2 месяца помещается на изображение водопада, потому что я не знаю происхождения изображения водопада. Я знаю, где изображение 2 месяца находится на изображении VIEW, но изображение не занимает весь imageView. Из-за AutoLayout и Aspect Fit он отличается в зависимости от размера/ориентации изображения. Я добавил жест 2Months Pan к представлению изображения водопада, но происхождение не выстраивается в линию. Код для панорамирования жеста, который прилагается к представлению 2months выглядит следующим образом
-(void) handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
self.itemToEdit.stickerLocation= recognizer.view.frame;
NSLog(@"The location of the sticker is %f and y is %f", recognizer.view.frame.origin.x, recognizer.view.frame.origin.y);
}
Есть ли способ, чтобы соответствовать UIImageView к фактическому отображаемому UIImage? В основном я хочу сделать что-то вроде self.selectPhoto.frame = self.selectPhoto.image.frame
Который я не могу сделать.
Подводя итог: Как узнать абсолютное происхождение моего изображенияПросмотр после того, как он был установлен с использованием AutoLayout и Aspect?
Я не изменить размер изображения перед установкой его в imageView с использованием AspectFit. Когда я переназначаю NSLayoutConstraint self.imageHeight.constant = newImage.size.height; imageHeight кажется оригинальной высотой изображения. Прежде чем переназначить imageWidth (ограничение) = 288, после imageWidth (ограничение) = 1500. Ограничения, по-видимому, изменяются до фактического изображения, а не отображаемого изображения. Есть предположения? Thx для подробного ответа! – leenyburger
Попробуйте второй подход, который я подробно рассмотрел с использованием соотношения сторон. – nhgrif