Soru Bir ebeveynin içindeki göreli konumu almak için convertPoint'i kullanma UIView


Bu konuyla ilgili bir düzine SO sorusuna baktım ve cevapların hiçbiri benim için işe yaramadı. Belki de bu beni doğru yola sokmaya yardımcı olur.

Bu kurulumu düşünün:

enter image description here

Ben almak istiyorum center UIBiton'un UIView'a göre koordinatları.

Diğer bir deyişle, UIButton merkezi UITableViewCell içinde 215, 80 olabilir, fakat UIView'ye göre 260, 165 gibi olmalıdır. İki arasında nasıl dönüşümü yaparım?

İşte denedim:

[[self.view superview] convertPoint:button.center fromView:button];  // fail
[button convertPoint:button.center toView:self.view];  // fail
[button convertPoint:button.center toView:nil];  // fail
[button convertPoint:button.center toView:[[UIApplication sharedApplication] keyWindow]];  // fail

Düğmenin tüm süper görüntülerinin arasından geçerek ve x ve y koordinatlarını ekleyerek bunu zor yoldan yapabilirdim, ama bu aşırı sıkıntı olduğundan şüpheleniyorum. Sadece covertPoint ayarlarının doğru birleşimini bulmalıyım. Sağ?


44
2018-04-08 15:37


Menşei


Sorunuza aşağıdakileri eklerseniz yardımcı olacaktır: Görüntünüzdeki tüm 4 görünümün çerçeveleri, denediğiniz yöntemlerden elde ettiğiniz çıktı ve gerçekte istediğiniz değer. - rmaddy


Cevaplar:


button.center koordinat sisteminde belirtilen merkez onun süper görüntülemesi, yani ben Aşağıdaki işlerin çalıştığını varsayalım:

CGPoint p = [button.superview convertPoint:button.center toView:self.view]

Veya düğmenin merkezini kendi koordinat sisteminde hesaplarsınız ve bunu kullanırsınız:

CGPoint buttonCenter = CGPointMake(button.bounds.origin.x + button.bounds.size.width/2,
                                   button.bounds.origin.y + button.bounds.size.height/2);
CGPoint p = [button convertPoint:buttonCenter toView:self.view];

Swift 4

var p = button.convert(button.center, to: self.view)

96
2018-04-08 15:45



Bingo! İlk denemeniz benim aradığım şeydi. Süper görüşün koordinat sistemine bağlı merkez, eksik olduğum şeydi. Teşekkür ederim! - Axeva
Teşekkürler @Martin R. Bu yardımcı oldu - Chamath Jeevan
Hızlı 3:  var buttonCenter = CGPoint(x: button.bounds.origin.x + button.bounds.size.width / 2, y: button.bounds.origin.y + button.bounds.size.height / 2) var p = button.convertPoint(buttonCenter, to: self.view) - Matt Butler


Martin cevap doğru. Swift'i kullanan geliştiriciler için, aşağıdakileri kullanarak ekrana göre bir nesnenin (düğme, görüntü, ...) konumunu alabilirsiniz:

var p = obj.convertPoint(obj.center, toView: self.view)

println(p.x)  // this prints the x coordinate of 'obj' relative to the screen
println(p.y)  // this prints the y coordinate of 'obj' relative to the screen

11
2017-11-19 07:01



@Axeva da var bir convertRect daha hassas hesaplama için İşte - Juan Boero


Burada Swift 3 Pablo'nun cevabının güncellenmesi, elbette ki durumumda harika çalıştı.

if let window = UIApplication.shared.keyWindow {
    parent.convert(child.frame.origin, to: window)
}

4
2018-03-07 19:48





Swift 4 

 Araman gerek convert düğmeden, süper görüntüden değil. Benim durumumda genişlik verilerine ihtiyacım vardı, bu yüzden sınırları sadece orta nokta yerine dönüştürdüm. Aşağıdaki kod benim için çalışıyor:

let buttonAbsoluteFrame = button.convert(button.bounds, to: self.view)

3
2018-02-26 21:24





hızlı 2.2 benim için çalıştı:

var OrignTxtNomeCliente:CGPoint!

if let orign = TXT_NomeCliente.superview, let win = UIApplication.sharedApplication().keyWindow {
        OrignTxtNomeCliente = orign.convertPoint(TXT_NomeCliente.frame.origin, toView: win)
    }

1
2018-05-05 14:28