2009-09-23 16 views
176

bir UIView pozisyonu açıkça view.center veya view.frame vb ile belirlenebilir ama hemen Superview var bu sadece ilgili olarak UIView konumunu döndürür içinde UIView pozisyon alın.iPhone - tüm UIWindow

ben tüm 320x480 koordinat sisteminde UIView konumunu belirlemek gerekir. Örneğin, UIViewUITableViewCell içeriyorsa, pencerenin içindeki konum, süper görüntüden bağımsız olarak önemli ölçüde değişebilir.

Bu nasıl bir fikir ve nasıl mümkün olabilir?

Alkış :) kolay bir soru

cevap

300

:

[aView convertPoint:localPosition toView:nil]; 

... yerel bir nokta pencere koordinatları koordinat alanından dönüştürür. Böyle pencere uzayda bir görünümün kökeni hesaplamak için bu yöntemi kullanabilirsiniz:

[aView.superview convertPoint:aView.frame.origin toView:nil]; 

2014 Düzenleme

: Matt__C yorumuna popülaritesi baktığımızda koordinatları işaret etmek makul görünüyor ...

Cihazı döndürürken
  1. değiştirmeyin.
  2. her zaman kendi köklerini, döndürülmemiş ekranın sol üst köşesinde bulunur.
  3. pencere koordinatlarıdır: pencerenin sınırları tarafından tanımlanan koordinat sistemi ist. Ekran ve cihaz koordinat sistemleri farklıdır ve pencere koordinatları ile karıştırılmamalıdır.
  4. Swift ise
+0

müthiş :) Ben basit olmalıdır düşündük, ama elimde olsaydı elmanın bu kadar kolay vermeyeceğini hissettim. teşekkürler –

+0

Başka bir soru ekledi - bu ancak gerçek aygıtta simülatörde benim için çalıştı :( –

+0

burada diğer soru http://stackoverflow.com/q/6013766/531527 unutmayın –

22

: Swift

let globalPoint = aView.superview?.convertPoint(aView.frame.origin, toView: nil) 
19

: uzantılı

let globalPoint = aView.superview?.convert(aView.frame.origin, to: nil) 
8

Swift 3:

extension UIView{ 
    var globalPoint :CGPoint? { 
     return self.superview?.convert(self.frame.origin, to: nil) 
    } 

    var globalFrame :CGRect? { 
     return self.superview?.convert(self.frame, to: nil) 
    } 
}