Я разрабатываю приложение, которое, помимо прочего, должно обрабатывать представления изображений, то есть вращать, изменять их размер, перемещать их ... сохранять это в базовой модели данных и восстанавливать их по требованию.
Вращение и масштабирование выполняются с помощью распознавателей жестов.Я читал здесь, что после преобразования вы не можете использовать рамку просмотра изображения, чтобы получить реальный прямоугольник, вместо этого вы должны использовать границы и центр.
Я пробовал несколько комбинаций сохранения / восстановления рамки просмотра, просмотрарамка слоя, просмотр границ, просмотр границ слоев, без удачи.Это мой лучший подход, но восстановленное изображение будет больше (хотя и только), если угол поворота не равен 0 (чем больше значение угла, тем больше размер восстановленного изображения).
Я понимаю, как хранить значения кадров и использовать иххотя восстановление границ не является связным, но я получаю мои "лучшие" результаты с этим.
Этот код используется для сохранения настроек просмотра изображения:
- (void)updateModelCoords {
CGFloat angle = atan2f(myImageView.transform.b, myImageView.transform.b);
CGRect frame = [myImageView.layer frame];
[myModel setW:[[NSNumber alloc] initWithFloat:frame.size.width]];
[myModel setH:[[NSNumber alloc] initWithFloat:frame.size.height]];
[myModel setX:[[NSNumber alloc] initWithFloat:frame.origin.x]];
[myModel setY:[[NSNumber alloc] initWithFloat:frame.origin.y]];
[myModel setCenterX:[[NSNumber alloc] initWithFloat:[myImageView center].x]];
[myModel setCenterY:[[NSNumber alloc] initWithFloat:[myImageView center].y]];
[myModel setAngle:[[NSNumber alloc] initWithFloat:angle]];
// db save stuff...
}
ЭтоКод, используемый для восстановления настроек просмотра изображений:
- (void) restoreImage {
float angle = [[myModel angle] floatValue];
CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
myImageView.transform = transform;
CGRect bounds = [myImageView.layer bounds];
bounds.size.width = [[myModel w] floatValue];
bounds.size.height = [[myModel h] floatValue];
bounds.origin.x = [[myModel x] floatValue];
bounds.origin.y = [[myModel y] floatValue];
[myImageView.layer setBounds:bounds];
CGPoint center = CGPointMake([[myModel centerX] floatValue], [[myModel centerY] floatValue]);
[myImageView setCenter:center];
}
Я применяю синюю рамку к слою просмотра изображений в качестве помощника.Ориентация и положение одинаковы, но после восстановления форма представляет собой квадрат, а перед сохранением - прямоугольник.
Подсказки будут очень полезны.
Дайте мне знать, если в коде потребуется больше кода.Чтобы уточнить
Большое вам спасибо