ayarlanması:Kısacası yeni oluşturulan doğru çerçeveyi CAShapeLayer
- Elma otomatik olarak
CAShapeLayer
içinframe
veyabounds
set DEĞİLDİR ayarlarsanız - (ve Apple
[UIView sizeThatFits]
bir eşdeğer uygulanan DEĞİL HAS) Yolun sınırlayıcı kutusunun boyutunu kullanarak çerçeve ... her şey yanlış gidiyor. Ne olursa olsun ayarlamak için denemek nasıl, bu vidalar-up yolu
Yani, programlı bir bir CGPath
yeni eklenen ile CAShapeLayer
yeni oluşturulan çerçevesini ayarlamak için doğru yolu nedir? Apple'ın belgeleri konuyla ilgili sessiz.
çalışmıyor denedim şeyler: katman en frame
edin,
- bir
CAShapeLayer
- bir
CGPath
oluştur tabakasının - eklemek - bu
{{0,0},{0,0}}
- Küme:
layer.frame = CGPathGetBoundingBox(layer.path)
Çerçeve şimdi doğru, ancak şimdi yol DOUBLE ofset -değiştiriliyor
layer.bounds = CGPathGetBoundingBox(layer.path)
- ... hepsi delirdi:yolunu neden etkili bir
Seti fazladan
kaydırılacak. Artık hiçbir şey anlam ifade etmiyor(x,y)
piksellayer.position = CGPathGetBoundingBox(layer.path).origin
- ... hiçbir zar; hala deli.
tek şey işi DID o çalıştı, ama başka bir yerde sorunlara neden olmaktadır ettik:
DÜZENLEME: Bu ekranı otomatik döndürme en kısa sürede KIRIYOR. Tahminim: Apple'ın otomatik döndürme , "dönüşüm" özelliğinin kontrolünü gerektirir.
- edin katmanın çerçevesini, bir
CAShapeLayer
- bir
CGPath
oluştur tabakasının - eklemek - bu
{{0,0},{0,0}}
- Seti var:
layer.frame = CGPathGetBoundingBox(layer.path)
- Seti:
layer.transform = CGAffineTransformMakeTranslation(CGPathGetBoundingBox(layer.path).origin.x * -1, // same for y-coord: set it to "-1 * the path's origin
Bu çalışır, ancak ... 3 parti çok sayıda kod ilk dönüşüm f varsayar veya bir CALayer
Kimliktir.
Bu zor olmamalı! Elbette burada yanlış yaptığım bir şey var mı?
(Bir önerim vardı: "Bir yol eklediğinizde, tüm noktaları el ile -1 * (top-left-point.x, top-left-point.y)
olarak kaydırmak için özel bir işlev çalıştırın".Yine, bu işe yarar - ama gülünç bir şekilde karmaşıktır)
Bunun için bir çözüm buldunuz mu? – jannej
Henüz değil. Şu anda sorunun kendisinden bir geçici çözüm kullanıyorum. Yavaş ve korumak için bir acı. Bence sorun Apple'ın kodunda bir hata, belki? – Adam
Küçük bir ek: Sonunda ".frame" in Apple tarafından desteklenmediğini keşfettim. Bu çok tuhaf bir şey çünkü her yerde kullanılıyor - ama eğer dokümanlar ve/veya Apple posta listelerinde yeterince derinlemesine kazıyorsanız, Apple mühendislerinden çalışma niyetinde olmadığını ve hataları düzeltmeyeceğini söyleyen notları keşfedersiniz. HERKES için .bounds'u kullanmanız/talep etmeniz ve "readonly" olarak .frame'i kullanmanız bekleniyor. Bu yüzden özellikle ironik bu durumda .frame "neredeyse çalışır", nerede ayar .bounds "asla çalışmaz" :) – Adam