Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Convert(_ rect: CGRect, to view: UIView?) ничего не делает, когда я передаю nil параметру представления

Автор вопроса: NinjaОтветов: 1

Я пытаюсь получить координаты вида в локальной координате супервизора. Таким образом, согласно документам, если представление равно нулю, этот метод вместо этого будет преобразовываться в базовые координаты окна. Итак, в моем случае это ничего не сделало, но если я передам ему представление, оно сработает.

let zoomImageView = UIImageView()
let xoomImageView2 = UIImageView()
let xoomImageView3 = UIImageView()
let stratingFrame2 = CGRect(x: 20, y: 10, width: 150, height: 130)
let startingFrame1 = CGRect(x: 40, y: 20, width: 200, height: 160)
let startingFrame = CGRect(x: 0, y: 200, width:375, height: 200)

override func viewDidLoad() {
    super.viewDidLoad()
    xoomImageView3.frame = stratingFrame2
    xoomImageView3.backgroundColor = UIColor.purple
    xoomImageView2.frame = startingFrame1
    xoomImageView2.backgroundColor = UIColor.black
    zoomImageView.frame = startingFrame
    zoomImageView.backgroundColor = UIColor.red
    zoomImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(animate)))
    zoomImageView.isUserInteractionEnabled = true
 //   zoomImageView.image = UIImage(named: "zuckdog")
    zoomImageView.contentMode = .scaleAspectFill
    zoomImageView.clipsToBounds = true
    view.addSubview(zoomImageView)
    zoomImageView.addSubview(xoomImageView2)
    xoomImageView2.addSubview(xoomImageView3)
    print(zoomImageView.frame)
    print(xoomImageView2.frame)
    print(xoomImageView3.frame)

    let newFrame = zoomImageView.convert(xoomImageView3.frame, to:  nil)
    print(newFrame)

Может кто подскажет что происходит?

iosswiftcoordinate-systems

Ответы

Ответ 1 · Prashant Tukadiya

если вы хотите преобразовать в координаты одно основное правило

Представление должно быть подвидом для методов преобразования пользовательских координат.

Теперь посмотрите на свой код

let newFrame = zoomImageView.convert(xoomImageView3.frame, to:  nil)
print(newFrame)

zoomImageView никогда не было подпредставлением xoomImageView3 в вашем коде, и еще одна вещь xoomImageView3 не имеет ПРЯМОГО отношения к объекту zoomImageView

Что вам нужно сделать, это

Сначала преобразуйте xoomImageView3 кадр в zoomImageView

 let xoomImageView3FrameAccordingTo_zoomImageView  = xoomImageView2.convert(xoomImageView3.frame, to:  zoomImageView)

в настоящее время

let newFrame = zoomImageView.convert(xoomImageView3FrameAccordingTo_zoomImageView, to:  self.view)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы