2013-06-12 15 views
8
self.layer.borderWidth = 0.5; 

bir UIButton veya UITextField retina ekranda ince hale fakat sağ ve alt sınırları render yoktur ederken olmayan retina ekranda sadece üst ve sol sınırları hale.Neden retina olmayan ekranlarda 1.0pt'den daha küçük çizgiler düzgün görüntülenmiyor? üzerinde

Ekranın dpi'si ve alt nokta çizgilerinin nasıl çizildiği ile ilgili bir şey olduğunu varsayalım, ancak daha iyi bir açıklama olması olasıdır.

Soru: 0.5 için borderWidth set ile retina olmayan retina hem ekranlarda beklendiği gibi bir UIView 'ın sınır gösterinin tüm tarafların sahip olmak mümkün olmadığını ben bilmek istiyorum.

+0

, yarım 0,5 puan 1 pikseldir. 1 piksellik bir kenarlık, mükemmel bir şekilde tutarlı ve net bir kavramdır. Retina dışı, diğer taraftan, 0.5 puan yarım pikseldir. Tam olarak ne tür bir sonucun * çerçevenin bir yarım piksel sınır çizmesini istemenizi beklersiniz? –

cevap

9

Tek bir piksel (nokta) çizgisi her zaman isterseniz, ekranın ölçeğine bağlı olarak farklı bir kenarlık genişliği kullanmanız gerekir.

Örn .: Şimdi bu çoklu ölçekler desteklenir

CGFloat scale = [[UIScreen mainScreen] scale]; 
if (scale == 2.0) { 
    // retina screen; 
    self.layer.borderWidth = 0.5; 
} else { 
    // non-retina screen 
    self.layer.borderWidth = 1.0; 
} 
+1

bu kabul edilebilir bir yanıt olabilir, fakat benim sorularımdaki kodun neden gösterilmemesi veya kırpılması için doğru ve alt kenarlıklara neden olan herhangi bir fikriniz var mı? – Brenden

+0

'CGFloat yüksekliği = 1/[[UIScreen mainScreen] ölçeği];' veya 'let yüksekliği = 1/UIScreen.mainScreen(). = Scale 2.2 için –

4

(3x @) şekilde Matt cevabı yazmak için muhtemelen daha iyidir: Retina

CGFloat scale = [[UIScreen mainScreen] scale]; 
CGFloat width = scale > 0.0 ? 1.0/scale : 1.0; 
[self.layer setBorderWidth:width]; 
+0

Derlemeniz gerekiyorsa bu 'f' sonekini kaldırmanız gerekir sanırım 64 bit ile? Anladığım kadarıyla, CGFloat 64 bit – kalehv

+0

@kalehv Yup'da, sonekleri kullanmamak için sabit örnekte iki katına çıkar. –

İlgili konular