2012-06-15 5 views
9

UIScrollView ve içinde UIImageViews ile nesne sayısı (UIView kompozisyon) var. UIImageViews'ın bazılarının yuvarlak sınırı vardır (bunun için myImageView.layer.masksToBounds = YES; kullanıyorum). Diğerinde dikdörtgen kenarlıkları ve içlerindeki görüntünün bir kısmı vardır (bunun için Interface Builder'da Clip subviews özelliğini kullanıyorum).clipToBounds and masksToBounds performance issue

Sorunum kaydırma yaparken bu klip özelliklerinin kuvvetli performansını etkileyebilir bulundu olmasıdır:

iPod touch (4. nesil) profilleme sonuçları için

: Etkin klip özelliklerinin (her ikisi veya biri ile

  • gerçekten

Ben kaydırma yaparken 60 fps sahip özürlü klip özelliklerine sahip

  • kaydırma yaparken onlara) Ben yaklaşık 30 fps var Bazı görüntüleri sınırlar ve diğer sınırlara (görüntü parçasını göstermek için) döndürmek için kırpmanız gerekir. Yani, benim sorum şu: Performansı geliştirmek için hangi yollar var? Bunu yapmak için düşük seviyeli yollar olabilir (drawRect: veya bir şey), ya da alfa maskeleme etrafında oynamak yararlı olabilir mi yoksa sadece yanlış bir şey mi yapıyorum?

    #import <QuartzCore/QuartzCore.h> 
    
    // ... 
    
    view.layer.shouldRasterize = YES; 
    

    Bu rastersize olacaktır: Eğer performansı (çoğu kez dramatik) geliştirmek için basit ve kolay bir yol grafiksel yoğun maske ve şeyler var

  • cevap

    30

    o öğenin katman üzerinde YES için shouldRasterize ayarlamaktır Bir arabelleğe bakma, böylece sürekli olarak yeniden oluşturulmaz. Bu, her görünüm için fazladan bir bellek alacaktır. Bu nedenle, bir tablo görünümünde olduğu gibi, kaydırma yaparken görünümleri gerçekten yeniden denemeniz ve yeniden kullanmanız gerekir. Ayrıca rasterizationScale için uygun bir değer ayarlamak gerekir retina ekranda doğru davranış için

    : Ben her öğenin yuvarlak köşeler vardı kaydırma fotoğraf galerileri, gibi şeyler için bu büyük başarı elde ettik

    view.layer.rasterizationScale = view.window.screen.scale; // or [UIScreen mainScreen] 
    

    , gölgeler, vb.

    +0

    iyi tavsiyeler! ama şimdi bu özelliği tam görünümüne uyguladığımda (yuvarlak görüntü görünümü ve içindeki metin etiketi ile) gerçekten yardımcı oluyor. Bu durumda metin çok çirkinleşir. Eğer sadece yuvarlak görüntü üzerine uygularsam neredeyse hiç etkisi olmaz. – Lloyd18

    +1

    Ah, pardon. Retina desteği için 'view.layer.rasterizationScale = [[UIScreen mainScreen] ölçeği] 'yi ayarlayın. Bu herşeyi gevrek yapmalı. Cevabımı güncelledim. –

    +0

    Ve bellek kullanımınızı kontrol etmek için hatırlayın. Rasterleştirmeyi kullandığınızda bellek kullanımı farkını görmek için "Activity Monitor" aracını kullanın. Ekstra video belleği muhtemelen Tahsislerde görünmeyecek. Artış çok büyükse, söylediğim gibi görünümleri yeniden denemelisiniz ve böylece herhangi bir zamanda çok fazla örnek bulunmuyor. –