У меня проблема с поворотом изображения с подпредставлениями в приложении для iOS 9+.У меня есть контейнер, содержащий 2 подпредставления.Подвиды имеют тот же размер, что и вид контейнера.Первое подпредставление содержит изображение со страницы PDF.Второе подпредставление содержит UIImageViews как подпредставления, которые располагаются поверх изображения PDF.Я использую систему координат PDF для правильного размещения и размера изображений.(Может быть, я должен упомянуть, что контейнерное представление само по себе является подпредставлением UIScrollview).
Представления изображения правильно расположены и ориентированы независимо от того, является ли PDF книжным или альбомным.Однако, когда PDF-файл в альбомной ориентации, я хотел бы повернуть и масштабировать конечное изображение, чтобы оно отображалось нормально.Один из способов сделать это - вращать, преобразовывать и масштабировать PDF и каждый вид изображения по отдельности, добавляя код для рисования в метод drawRect каждого вида.Это работает, но очень медленно.
Из сообщения SO я узнал, что если я применяю вращение и преобразование к CALayer представления контейнера, iOS применяет изменения ко всей иерархии представления.Это происходит намного быстрее при повороте изображения ландшафта.Но я не смог масштабировать конечное изображение, используя слой вида контейнера.На iPad у меня получилось правильно повернутое окончательное изображение, центрированное по горизонтали вверху экрана, но обрезанное с левой и правой сторон.Длинная ось изображения по-прежнему равна высоте экрана, шире ширины экрана.
Код в представлении контейнера действительно короткий:
- (void) setOrientation:(NSInteger)orientation
{
_orientation = orientation;
if (orientation == foPDFLandscape)
{
// [[self layer] setNeedsDisplayOnBoundsChange:YES];// no effect
// [[self layer] setBounds:CGRectMake(0.0, 0.0, 100.0, 100.0)];//does not change image size or scale
// [[self layer] setContentsScale:0.5];//does not change image size or scale
[[self layer] setAnchorPoint:CGPointMake(0.0, 0.9)];
CATransform3D transform = CATransform3DMakeRotation(90.0 * (M_PI / 180.0), 0.0, 0.0, 1.0);
[[self layer] setTransform:transform];
//putting the scaling code here instead of before the transform makes no difference
}
}
Настройкаbounds, frame или contentScale, до или после преобразования и в различных комбинациях, не влияет на конечное изображение.Также не меняются значения гравитации содержимого и autoResizeMask.
Есть ли способ, которым я могу это сделать?
Спасибо