Сохранить размер / положение CALayer в UIView при повороте

#iphone #uiview #calayer #rotation

#iPhone #uiview #calayer #поворот

Вопрос:

У меня есть UIImage со следующими свойствами:

 imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
imageView.contentMode = UIViewContentModeScaleAspectFit;
 

Позже я добавлю пользовательский CALayer элемент в imageview в заданной позиции.

Когда я поворачиваю свой imageview, изображение масштабируется по размеру (с учетом contentMode), но теперь CALayer оно расположено неправильно. По-видимому, только Y-позиция неверна. Как я могу CALayer правильно изменить положение при повороте view?

Ответ №1:

Насколько я знаю, чтобы расположить / разметить свой пользовательский слой, вы должны подклассировать свой imageview и реализовать этот метод:

 - (void) layoutSublayersOfLayer:(CALayer*)layer
{
    [super layoutSublayersOfLayer:layer];

    self.customlayer.position = CGPointMake(
            self.bounds.size.width / 2, self.bounds.size.height / 2);
}
 

Если вы не хотите создавать подкласс imageview, вы можете попробовать этот способ.
Этот код должен быть в вашем imageview-controller:

 - (void) viewDidLoad
{
    [super viewDidLoad];

    self.container = [CALayer layer];
    self.container.bounds = self.imageview.bounds;
    self.container.delegate = self;

    [self.container addSublayer:self.customlayer];
    [self.imageview.layer addSublayer:self.container];
}

- (void) layoutSublayersOfLayer:(CALayer*)layer    // this is layers delegate method
{
    if (layer == self.container)
    {
        self.customlayer.position = CGPointMake(self.container.bounds.size.width / 2, 
                                                self.container.bounds.size.height / 2);
    }
}