CALayer в UIScrollView имеет неправильный размер - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь увеличить UIImageView и UIView, которые находятся внутри UIScrollView, но это не работает.

У меня UIImage and CALayer, у обоих есть одинаковый размер (2048×2155). Эти компоненты завернуты в UIImageView (представление изображения) и UIView (холст) и отображаются внутри UIScrollView.

Представление изображения и холст имеют одинаковые content scale factor, что равно 2.0 (UIScreen.main.scale), но холст неправильного размера (см. рисунок ниже).

введите описание изображения здесь

Подслои CALayer были созданы с использованием CAShapeLayer and UIBezierPath.

UIScrollViewDelegate выглядит следующим образом:

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    canvas
}

func scrollViewDidZoom(_ scrollView: UIScrollView) {
    self.scrollView.centerContentView()
}

Центральное представление содержимого выглядит следующим образом (метод внутри custom UIScrollView):

func centerContentView() {        
    let boundsSize = bounds.size
    var centerFrame = canvas.frame
    
    if centerFrame.size.width < boundsSize.width {
        centerFrame.origin.x = (boundsSize.width - centerFrame.size.width) / 2.0
    } else {
        centerFrame.origin.x = 0
    }
    
    if centerFrame.size.height < boundsSize.height {
        centerFrame.origin.y = (boundsSize.height - centerFrame.size.height) / 2.0
    } else {
        centerFrame.origin.y = 0
    }
    
    imageView.frame = centerFrame
    canvas.frame = centerFrame
}

Все мои усилия потерпели неудачу. Я пытался преобразовать CALayer с помощью холста, но безуспешно. Буду благодарен за любые предложения или помощь. Спасибо.

1 Ответ

0 голосов
/ 30 июня 2020

Проблема была исправлена ​​с помощью следующих строк:

let scale = UIScreen.main.bounds.width / imageSize.height
let scaleTransformation = CATransform3DMakeScale(scale, scale, 1)

for layer in layers { 
   layer.transform = scaleTransformation
}

, где imageSize равно 2048×2155, и все работает нормально. Спасибо.

...