2012-04-03 9 views
5

Düzeltemediğim bir sorunum var. UIScrollView (ekran dışı içerik dahil) bir ekran görüntüsü almaya çalışıyorum ama görünüm uzun olduğunda renderInContext kaydırma görünümünün tüm içeriğini almıyor. Üretilen görüntü boyutları doğrudur, ancak işlenen veriler, bu parçaların olması gereken beyaz boşluk bırakan ekranın parçalarını eksik görünüyor. Eksik bloklar, "scaleToFit" olarak ayarlandığına inandığım bir UIWebView'daki içeriğindendir. Her zaman olmaz, sadece UIWebView'ın yüksekliği oldukça büyük olduğunda ortaya çıkar. Beni düşünen şey, UIWebView'ın ölçeklendirilmesi ile ilgili.Bir iOS cihazında ekran görüntüsü alırken verilerin eksik "bloklarını" nasıl düzeltirsiniz?

Eğer coreLayer.bounds CGRECT değerini aşağıda değiştirirseniz, farklı sonuçlar elde ederim, bazen eksik bloklar altta ve bazen de resmin ortasındadır.

Bu question kabul cevap gelen kodla başladı ve kesme sorunu fark ettiğinde, aşağıdaki bunu modifiye:

kesme ayarı (bazı manzarası ile düzelttim yardım etti
UIGraphicsBeginImageContext(scrollView.contentSize); 
{ 
    CGPoint savedContentOffset = scrollView.contentOffset; 
    CGRect savedFrame = scrollView.frame; 


    //hide the scroll bars 
    [scrollView setShowsHorizontalScrollIndicator:NO]; 
    [scrollView setShowsVerticalScrollIndicator:NO]; 


    scrollView.contentOffset = CGPointZero; 
    scrollView.frame = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height); 
    //adjust layer for cut-off 
    CALayer *coreLayer = scrollView.layer; 
    coreLayer.bounds = CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height); 
    [coreLayer renderInContext: UIGraphicsGetCurrentContext()]; 
    //[scrollView.layer renderInContext: UIGraphicsGetCurrentContext()]; 
    image = UIGraphicsGetImageFromCurrentImageContext(); 

    scrollView.contentOffset = savedContentOffset; 
    scrollView.frame = savedFrame; 


    //reset the scroll bars to default 
    [scrollView setShowsHorizontalScrollIndicator:YES]; 
    [scrollView setShowsVerticalScrollIndicator:YES]; 
} 
UIGraphicsEndImageContext(); 

) Ancak UIScrollView oldukça uzun olduğu zaman hala kesiliyor. Bir süredir bunun üzerinde çalışıyorum ve bir düzeltme bulamıyorum. Önerin var mı? Bu sorunu hiç karşılaştıran oldu mu?

Lütfen yardım edin!

+0

Sadece bir düşünce, scrollView.frame.size'yi scrollView.contentSize olarak geçici olarak değiştirmeyi düşündünüz mü? Bu, tablo görüntüsünün çerçeveye sığdığı sürece tüm hücreleri yüklemesini gerektirir (tablo, önbellek içeriğini çerçevenin dışındaki, ekranın dışında değil). – Kalle

cevap

0

Kaydırma görünümünüz bir tablo görünümü mü? Eğer öyleyse, hücrenin yeniden kullanımı nedeniyle hemen hemen yalnızca ekran içeriği var. Düzenli bir kaydırma görünümü olsa bile, işletim sisteminin kaydırma görünümünde bazı ekran dışı öğeler oluşturmayarak optimizasyonlar yaptığı kabul edilebilir. Bu doğruysa, bunu bir seferde bir elemana programlayarak kaydırma yaparak ve bunların her birini içeriğinize doğru konuma getirerek çalışabilirsiniz.

+0

Yup, tam olarak ne yaptığı ve aslında ne kadarının işlendiğini anlamak zorundaydım. Bulduğum şey, bir anda görülebilen genellikle 3 "blok" olmasıdır. Ardından, UIScrollView öğesini kaydırdığınızda, bu öğeler kaydırma yönüne göre yeniden çizilir. Bu yüzden 3 panel alanının bir ekran görüntüsünü alıyorum, bir sonraki görüntülenebilir 3 panele, vs.'ye kaydırıyorum. – thiesdiggity

+0

Kodunuzun sabit kodlanmış 3 numaralı numaraya sahip olmadığından emin olmanızı isterim. Ekran dışına çekilen satırların sayısı, kullanılabilir bir RAM veya GPU özelliklerine bağlı olarak yeni bir işletim sistemi sürümü ile değişebilen veya başka bir cihazda farklı olabilecek bir uygulama ayrıntısı olabilir. –

İlgili konular