2010-11-29 23 views
19

'dan yararlanacaktır. Sorum, net bir yanıt almayan bu Not drawing outside bounds when clipToBounds=NO'a çok benzer., UIView'ın sınırları dışında, drawRect

Temel olarak UIView'im var ve ekranın kenarına doğru bir çizgi çizmek istiyorum. Bu noktaların nerede olduğunu hesaplamak kolaydır, [self convertPoint:(CGPoint){0,0} fromView:[self superview]]; kullanarak (benim görüşümün süper görünümüne göre orijini bulur. Ama benim görüşümün çizgilerinden bir çizgi çizdiğimde: görünüşümün sınırlarında kırpılır.

Bir yol var mı? viewToBounds özelliğini değiştirmeyi denedim, ancak herhangi bir efekt gibi görünmüyor.

Çizgilerimi süper görüntüden çizemiyorum çünkü bunu birden çok görünümle yapmalıyım ve bazıları, diğerlerinin önünde olacak ... superview'in drawRect katmanını bulmak kötü bir fikir gibi görünüyor.

Benzer şekilde, görünümümün sınırlarını yeniden boyutlandırabileceğimi düşünmüyorum. tüm ekran, çünkü görüşlerimin dinamik olarak yeniden boyutlandırılabilmesi gerekiyor ... bunun işe yaraması için BÜYÜK (> 20.000 puan kare) olması gerekiyordu.

+0

Kayıt için, kardeş görünümüne gittim ve kardeş görünümünü de taşıdığından emin olmak için görünümü yeniden düzenlerken kullandığım tüm yöntemleri çektim. Bu performansın daha iyi olmasını sağladı, çünkü görüşlerin herhangi biri için maksimum boyut ekranın boyutudur. –

cevap

8

Hiçbir zaman bir görünümün sınırları dışında çizim yapmayı önermem. Görünümünüzün çiziminizi dahil etmek için otomatik olarak yeniden boyutlandırılması gerekiyor veya saydam örtüşen görünümlere sahip olmanız gerekiyor. Ya da her ikisi de. Bu davaların hiçbirinin örtmeyeceği bir durumu düşünemiyorum, ama hayal gücümden yoksun olabilirim. =)

Şuanki durum şudur: süper görünüm yeniden çizildiğinde, yeniden çizilmesi gereken süper görüntüyü dışarıda yaptığınız çizimin silinmesiyle sonuçlandığını söyler. Bir süredir, yanılıyorsam daha fazla bilgiye sahip olan herkes beni (düzeltmeli) yapabilir!

"Quartz Debug" (standart elma geliştirici araçlarını yüklemeden, /Developer/Applications/Performance Tools/Quartz Debug) simülatörde çalışıyor mu, bilmiyorum ama denemeye değer. Yeniden çizilme sırasında ne zaman ve ne sıklıkta tekrarlanacağını, yenilenmelerde sınır ve isteğe bağlı gecikmeyle birlikte gösterecek bir moda sahiptir.

İstediğinizi yapabilirsiniz, ancak alt görünümün dışına her gittiğinizde alt görünümlerinizi yeniden çizmeye zorlamanız gerekir; bu, süper görüntünüzün, çocukların, kendi çizme işlevinin içindeki öğeleri elle çizmesi anlamına gelir. . Aslında, elmanın çizim paradigmasını dışarı atıyorsunuz ve alt görünümlerinizin ana görünümünüzün bir çizim uzantısı gibi davranmasına neden oluyorsunuz. Ayrıca, aralıklarınız çok dinamik ise, çizim yapmak yerine ekranın yüzdesi veya süper görünüme bakmak isteyebilirsiniz, kod yazmak daha mantıklı olabilir.

+0

Tavsiye için teşekkürler. Soruna farklı bir açıdan bakmak yardımcı oldu. Kardeş görüşlerine gittim. –

+13

Kullanım durumum var: Süper görünümünün sınırlarına mükemmel bir şekilde yeniden boyutlandıran bir dikdörtgen çizmek istiyorum; ama aynı zamanda dikdörtgenin altına işaret eden küçük bir üçgen eklemek istiyorum. Bunu etkili bir şekilde yapmak için, küçük üçgenin görünümün sınırlarını çizmem gerekiyor. –

İlgili konular