SORU
1 EKİM 2009, PERŞEMBE


Bir UİView yeniden çizmek için zorlamak için en sağlam yolu nedir?

Öğeleri bir liste ile bir UİTableView var. Bir öğe seçme iter sonra aşağıdaki gibi devam ettiği bir viewController. yöntem viewDidLoad ben benim subviews üzerinde gerekli olan veri için bir Yöntemi ateş - drawRect geçersiz ile UİView bir alt sınıfı. Veri bulut geldiğinde benim görüşüm hiyerarşi yapmaya başlayacağım. söz konusu alt iletilen verileri alır ve drawRect metodu şimdi işlemek için gereken her şeye sahiptir.

Ama.

DrawRect açıkça demiyorum çünkü - Cocoa-Touch kolları - gerçekten işlemek için bu UİView alt istediğiniz Cocoa-Touch bildiren hiçbir yolu yok. Ne zaman? Şimdi iyi olurdu!

Çalıştı [myView setNeedsDisplay] ettim. Bu tür bazen işe yarıyor. Çok sivilceli.

Saatlerce bu ile güreş olmam lazım. Birine zorla bir UİView için kaya gibi sağlam, garantili bir yaklaşım yeniden işleme ile bana veriniz.

İşte görüntülemek için veri akışı kod parçacığı:

// Create the subview
self.chromosomeBlockView = [[[ChromosomeBlockView alloc] initWithFrame:frame] autorelease];

// Set some properties
self.chromosomeBlockView.sequenceString 	= self.sequenceString;
self.chromosomeBlockView.nucleotideBases    = self.nucleotideLettersDictionary;

// Insert the view in the view hierarchy
[self.containerView          addSubview:self.chromosomeBlockView];
[self.containerView bringSubviewToFront:self.chromosomeBlockView];

// A vain attempt to convince Cocoa-Touch that this view is worthy of being displayed ;-)
[self.chromosomeBlockView setNeedsDisplay];

Eyvallah, Doug

CEVAP
1 EKİM 2009, PERŞEMBE


,- Oluşturma re UIView güç için garantili sağlam şekilde [myView setNeedsDisplay]. Eğer bu konuda sorun yaşıyorsanız, bu sorunlardan biriyle karşılaşmak olasıdır:

  • Aslında, veri var önce onu arıyorsun, veya -drawRect: aşırı önbellekleme bir şey.

  • Bu yöntem çağrısı anda çizmek için Görünüm bekliyorsunuz. "Draw an bu an" Kakao çizim sistemi kullanarak. talep için kasten yolu yok Bu görüşü birleştirme sistemini bozabilir, performans çöp ve büyük olasılıkla güçlü her türlü oluşturun. Sadece "bu bir sonraki beraberlik döngüsü çizilmesi gerekiyor." demek için yollar vardır

Eğer ihtiyacınız var "biraz mantık, beraberlik, biraz daha mantık," daha sonra ihtiyacınız koymak "biraz daha mantık" ayrı bir yöntemi çağırmak ve bunu kullanarak -performSelector:withObject:afterDelay: bir gecikme ile 0. "Önümüzdeki çizmek döngüsü sonra." biraz daha mantık koyacağız this question örnek böyle bir kod ve bir durumda olabilir gerekli (gerçi genelde en iyi bakmak için başka çözümler mümkünse beri karıştırdığı kodu).

Eğer bir şeyler çizilmiş alıyorsanız düşünmüyorsun bile, -drawRect: kesme noktası koyup adlı alıyoruz. -setNeedsDisplay, diyorsun ama -drawRect: sonraki olay döngü içinde " denilmesi değilse, o zaman sana ters hiyerarşi kazmak ve bir yere zekası için çalışıyorsun değil emin olun. Aşırı zeka benim durumumda kötü çizim #1 nedenidir. İstediğiniz şeye sistemi kandırmak için ne kadar iyi bildiğini düşündüğümüz zaman, genellikle istemediğini tam olarak bunu yapıyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • Soulkiller13 ツ

    Soulkiller13

    30 Mayıs 2013
  • TheDroidDemos

    TheDroidDemo

    15 ŞUBAT 2011