SORU
2 ŞUBAT 2013, CUMARTESİ


drawRect veya drawRect (tek Çekirdek Grafik vs subviews/resimler ve neden drawRect/kullanabilir mi?)

Bu sorunun amacı netleştirmek için: her iki subviews ile karışık görünümler oluşturmak ve drawRect. kullanarak NASIL biliyorum Tam olarak anlamak için zaman var ve bu yüzden diğer üzerinde kullanmaya çalışıyorum.

Ben de bir anlamda bunu çok önceden optimize etmek ve bir şeyler yapmak herhangi bir profil yapmadan önce daha zor bir şekilde yapmaz bunu anlıyor. Her iki yöntem ile rahat hissediyorum, ve gerçekten daha derin bir anlayış istiyorum şimdi bunu düşünün.

Benim karışıklık bir sürü tablo görünümü kaydırma performansı gerçekten düzgün ve hızlı yapmayı öğrenmek geliyor. Tabii ki bu yöntem, orijinal kaynak iPhone için author behind twitter (eski tweetie).Temelde tablo kaydırma tereyağlı pürüzsüz hale getirmek için, gizli subviews kullanın, ancak bunun yerine, bir özel uiview tüm çizim yapmak olduğunu söylüyor.Aslında subviews kullanarak çok çok fazla yük var çünkü render yavaşlar ve sürekli ebeveyn görüşleri üzerinde yeniden birleştirilmiş gibi görünüyor.

Adil olmak gerekirse, bu 3G çok sıfır km yeni oldu ve iDevices çok daha hızlı o zamandan beri aldık zamanlarda yazılmıştır. Hala this method yüksek performans tabloları interwebs ve başka yerderegularly suggested . Aslında Apple's Table Sample Code, birkaç WWDC video (Practical Drawing for iOS Developers), ve birçok iOS ileri sürülmüştür programming books önerilen bir yöntem.

Grafik tasarım ve onlar için Çekirdek Grafik kodu oluşturmak için awesome looking tools bile var.

İlk başta "Çekirdek Grafikleri var olmasının bir nedeni vardır. inanmak için neden oldum HIZLI!"

Ama en kısa sürede ben anladığımı düşünüyorum "İyilik Çekirdek Grafikleri mümkün", başlarım görmek drawRect genellikle sorumlu kötü yanıt verme uygulaması, son derece pahalı bellek akıllıca ve gerçekten vergi CPU. Ben temelde, "Avoid overriding drawRect" (2012 iOS App Performance: Graphics and Animations WWDC)

Sanırım bu yüzden, her şey gibi, karmaşık. Belki de kendimi ve diğerlerini anlamak ne Zaman ve Neden kullanmak için. drawRect yardım edebilirsiniz?

Birkaç bariz bir durumları Çekirdek Grafik kullanımı görüyorum

  1. Dinamik veri (Apple'ın Hisse senedi Grafik örneği)
  2. Basit yeniden boyutlandırılabilir bir görüntü ile idam edilemez esnek bir kullanıcı arabirimi öğesi var
  3. Bir dinamik grafik oluşturma, Bir kez işlenen birden fazla yerde kullanılır

Durumlar Çekirdek Grafikleri önlemek için görüyorum

  1. Görünüm özellikleri ayrı animasyon gerekiyor
  2. Algılanan herhangi bir ekstra çaba CG kullanarak kazanç değmez yani nispeten küçük bir görünüm hiyerarşisi var
  3. Her şeyi yeniden çizilmesi olmadan görünümü parçalarını güncellemek istiyorum
  4. Senin subviews düzeni üst boyutu değişiklikleri görüntülemek için güncelleme gerekiyor

İhsan bilginize. Hangi durumlarda Çekirdek Grafikleri (o da subviews yapılabilir)/drawRect ulaşmak mı? Hangi faktörler bu karara götürecek? Nasıl/Neden genel olarak performansı artırmak için bir özel görünüm tereyağlı pürüzsüz tablo hücre kaydırma, henüz Apple tavsiyede karşı drawRect için tavsiye çekiyor? Ne basit arka plan resimleri (CG vs onları da yeniden boyutlandırılabilir bir png resmi kullanarak)?

Bu konu derin bir anlayış değerli uygulamalar yapmak için gerekli olmayabilir, ama neden açıklamak mümkün olmadan teknikleri arasında seçme sevmiyorum. Beynim bana kızar.

Soru Güncelleştirin

Bilgi için herkese teşekkürler. Burada bazı sorular açıklama:

  1. Eğer çekirdek grafikleri ile bir çizim, ama UİİmageViews ve önceden oluşturulmuş bir png ile aynı şeyi yapabilirsiniz, her zaman bu yol gitmek gerekir?
  2. badass tools like this, Özellikle çekirdek grafik arayüz elemanları çizim düşünmelisiniz? benzer bir soru: (Muhtemelen ne zaman senin elemanın görüntü değişkendir. 20 farklı renk çeşitleri ile bir düğmeye örneğin. Başka bir dava var mı?)
  3. Verilen anlayışımla cevabım aşağıda, acaba aynı performans artışı için bir tablo hücresi muhtemelen kazanmış etkili bir yakalama snapshot bitmap hücreden sonra karmaşık hale UİView kendini gösteren ve bu süre kaydırma ve saklanacak karmaşık görünüm? Belli ki bazı parçaları üzerinde çalışılması gerekiyor. Sadece ilginç bir düşünce vardı.

CEVAP
2 ŞUBAT 2013, CUMARTESİ


İstediğiniz zaman UİKit ve subviews sopa. Daha üretken olabilir, ve bu da işleri daha kolay korumak için gereken tüm OO mekanizmaları yararlanın. İhtiyacınız olan performansı UİKit dışında alamıyorsan Çekirdekli Grafik kullanın, ya da UİKit çizim etkileri hack birlikte çalışıyor daha karmaşık olacağını biliyorsun.

Genel iş akışı subviews ile tableviews inşa etmek olmalıdır. Kullanımı uygulamayı destekleyecek eski donanım üzerinde kare hızını ölçmek için Araçları. 60fps, bırak CoreGraphics aşağı alamazsın. Bir süre yaptım zaman, UİKit muhtemelen zaman kaybı olduğu için bir anlamda olsun.

Neden Çekirdek Grafikleri hızlı?

CoreGraphics çok hızlı değil. Eğer her zaman kullanılan, muhtemelen yavaş gidiyoruz. İşini GPU devredilen olduğunu UİKit bir sürü iş karşı CPU, yapılması gerektiren zengin bir çizim API,. Eğer bir top ekran boyunca hareket eden animasyon olsaydı, saniyede 60 defa bir görünüm setNeedsDisplay aramak için kötü bir fikir olurdu. Eğer ayrı ayrı animasyonlu gereken görünümü, alt bileşenler varsa, her bir bileşen ayrı bir katman olmalıdır.

Diğer sorun drawRect ile çizim özel yapmazsan, UİKit drawRect yok-op, ya da kompozisyon ile kısayolları almak, böylece stok manzarası optimize edebilirsiniz. Sen drawRect geçersiz kılabilir, UİKit ne yaptığını hiçbir fikri vardır, çünkü yavaş yol almak zorundadır.

Bu sorunlar tablo görünümü hücresi faydaları daha ağır olabilir. DrawRect bir görünüm ilk ekranda göründüğünde çağırıldıktan sonra, içeriğini önbelleğe alınır ve kaydırma basit bir çeviri GPU tarafından yapılır. Tek bir görünümde, çok karmaşık bir hiyerarşi ile uğraşıyoruz çünkü, UİKit. drawRect iyileştirmeleri daha az önemli hale gelir. Yani darboğaz Çekirdek Grafik çizim ve optimize edebilirsiniz nasıl olur.

İstediğiniz zaman, UİKit kullanın. Çalışan basit bir uygulama. Profil. Bir teşvik var, optimize.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bobbylee Budde

    Bobbylee Bud

    13 ŞUBAT 2011
  • grickle

    grickle

    22 AĞUSTOS 2006
  • TSE

    TSE

    12 Kasım 2012