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

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

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)

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


person Ninja    schedule 23.02.2018    source источник


Ответы (1)


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

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

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

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)
person Prashant Tukadiya    schedule 23.02.2018
comment
пожалуйста, взгляните еще раз на мой код и еще раз взгляните на документы, не пишите беспорядок. Во-вторых, я обнаружил, что это работает странным образом только тогда, когда я использую функцию в ViewDidLoad, если я использую ее в viewDidAppear, она работает нормально. так что может быть там как-то скрывается настоящая причина. - person Ninja; 23.02.2018
comment
@ Н.Хасанов Правда. Тогда, пожалуйста, попробуйте этот MESS - person Prashant Tukadiya; 23.02.2018
comment
@ Н.Хасанов Вы добавили это в свой вопрос. что он работает в ViewDidAppear? Извините, что у вас очень плохое соглашение об именах ваших переменных. - person Prashant Tukadiya; 23.02.2018
comment
вы находитесь в неправильном направлении. Спасибо за ваши усилия. - person Ninja; 23.02.2018
comment
да, это работает, но спасибо, мне не нужна ваша помощь. я не мог мне помочь. большое тебе спасибо. хорошего дня. - person Ninja; 23.02.2018
comment
@ Н.Хасанов Это зависит от тебя, братан. Хорошего дня !!. Называть чьи-то усилия беспорядок очень оскорбительно, прежде чем понять настоящую цель - person Prashant Tukadiya; 23.02.2018