Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.
0 oy
901 kez görüntülendi
ios development kategorisinde tarafından
txt formatında çok uzun yazılar var. Sayfalama özelliğine sahip basit bir text viewer oluşturmak istiyorum. Cihazın width ve height değerlerine göre yazıyı sayfalara bölerek şu resimdeki * gibi bir sonuç elde etmek istiyorum.  Bu konuda nasıl bir yol izlemem gerekir?

* http://i.hizliresim.com/yL4mAj.jpg

2 Cevaplar

+1 oy
tarafından

Daha önce denemedim, ama şöyle birşeyin çalışabilceğini umuyorum.
Bence iki ihtimal var .

Birincisi benzerini yapmış olduğum bir ihtimal.

Yalnız bu ihtimalde ekran ölçüsüne yüzde yüz sığmaz. Biraz büyük olabilir karakter boyutuyla alaklı olarak.

Şöyle gelen textin length değerin alırsın. Senin maxsimum karakter sayına bölersin bu da sana sayfa sayını verir. Text ide aynı şekilde bölüp, bir diziye sayfa numarası ve text i şeklide bir diziye atarsın. Daha bir table view oluşturup, 1 adet içinde textview olan hücresini oluşturusun.

Daha sonra, ilgili hücrede hucrenin index numarasına sahip sayfanın text değerini alıp, textview içine eklersin.

Slide ihtimali nasıl çalıcak dersen, tabloya fromleft olack şekilde reload ihtimali için animasyonu eklersin.

Daha sonra tabloya tapgasture fonksiynu ile swipe ihtimallerine bir fonksyiyon atarsın swipe yapıldığında ilfili fonksyon, tabloyu reload eder bunu yaparkende textview in geçilen sayfaya ait index değerine sahip alan texti getirir. Bu aşamada slide hareketini eklediğimiz animasyon yapar.

İkinci ihtimal, denemedim sadece fikir vermesi için soyluyorum.

Bir ViewC içinde tüm ekranı kaplayan, bir view ve içinde textview olur. Daha sonra bu view e de swipe, ihtimali için bir fonksiyon eklersin.

Bu fonksiyon, çalıştığında swipe yaılan tarafa ekran ölçüsünde bir textview ve içine metin ekler. aynı zamanda öneki görünen textview in orgin.x değerini ekranda gözükmeyecek şekilde yavaşça azaltır yani kaydırır. Sağ tarafa eklediğimiz yeni tekt view de ekranda gözükücek şekide konumlandırır.

Burdaki önemli nokta, ilk textivew in contentTop + ekran yüksekliği değerini alıp, ikinci tekview in contentTop değerini değiştir.

Bu sayede slide işlemi yapıldığında, yeni gelen textview ekran ölçüsünün altında kalan ikinci alanı kullanıcıya göstermiş olur.

Açıklamam çok yüzeysel oldu, ama az çok aklına yatan biri olursa, örnek konusunda yardımcı olmaya çalışırım.

tarafından
Üstadım çok teşekkür ederim. Bu iki alternatifte performans açısından hangisi daha iyi sonuç verir?

Yazı uzun olacağı için, bu işlemleri hesaplamak ve render etmek anlamında soruyorum.

 Kullanıcının ve cihazın kasılmayacağı bir yöntem olarak hangisi daha iyi olur onu kestiremedim. Denemeye çalışacağım ama vaktiniz olduğunda aslında  örnekleme şansınız olursa çok makbule geçer.

Eksik olmayın üstadım.
tarafından
Rica ederim, estağfurullah burdaki tek üstat Yasin Turkoğlu :D,

Bugun köpeğimin başına gelen ufak bir kazadan dolayı vakit bulamadım, yarın akşam bir örnek hazırlamaya çalışırım.
tarafından
Ben hiç bakmamışım cevaplayan kısmına :) o yüzden Yasin üstadımdan yanıt geldi sandım.

İlginiz için çok sağolun.
+1 oy
tarafından

Temelde sadece text .xib dosyasının view içinde dahil olduğu bir örnek hazırladım.
Bence en basit ve stabil çözüm bu. Tabi hatalarım olabilir bende bu konuda çok profesyonel değilim.
Örneğin kodları arasında açıklama yapmaya çalıştığım.
Aklına takılan birşey olursa yardımcı olmaya çalışırım.

Aşağıdaki linkten örneğe ulaşabilirsin.
https://drive.google.com/folderview?id=0B4MEF11v_cH3R2RaWFN0WTY5akk&usp=sharing

tarafından
Örnek için teşekkür ederim. Zaman ayırıp ilgilenmeniz ve yardımcı olmanız beni çok mutlu etti.

Şimdi bahsettiğiniz yöntemi daha iyi anladım. Sadece 2 soru(n) var karşımda.

1- Yazının  gerçek cihazdaki testi esnasında bu örneğin yüklenişi  biraz zaman alıyor. (5 sn civarı sürüyor 4S'te. )  Ancak daha da uzun bir yazıda bu süre daha çok uzayabilir. Y azıyı parçalara bölerek sayfalama yapmak daha sağlıklı olabilir mi, ya da mümkün mü bu örneğinize baz alırsak? TableView kısmında anlattığınız şekilde.

2- Yazının  aşağıya  veya yukarıya doğru scroll edilmesini istemesem bunu sağlayabilir miyim? İlgili sayfanın yazısı olsa sadece. Yani sadece left ve right ile swipe olsa ve ekrana sığacak kadar yazı viewin içine yerleşse çok güzel bir sonuç olur.
tarafından
işyerindeyim ve biraz yoğun bir gün bu akşam yardımcı olmaya çalışacağım.
tarafından
Örnek hazıricak vakit bulamadım ama sende bilgili bir arkadaşımızsın önceki örnek üstünden basitçe açıklıyım.

Önceden sayfaya iki adet view ekliyorduk ya, bu örnekte sayfaya sadece 1 adet table view ekle.

Tablo yapısını oluşturuken hücre sayısnı bir olarak belirle. return 1 gibi,
Daha sonra ilk örnekte dolduğu left ve right swipe gustre ekle ilk örnekte yapmıştık.
Bu swipe olaylarının tetiklendiği fonksiyon içinde, daha önceden parçlara bölüm indislere yarıdğımız textin ilgili parçasını çağır. bu text tablounun içeriğindeki verinin çekildiği değişkenine ata ve tabloyu reload et. tabi bunu yapmadan önce slide efektinin olması için aşağıdaki animasyonu bu ilemi yapmadan önce ekle.

            let transition = CATransition()
            transition.type = kCATransitionPush
            transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
            transition.fillMode = kCAFillModeForwards
            transition.duration = 0.5
            transition.subtype = kCAAlignmentLeft
            self.tableViewOtletAdi.layer.addAnimation(transition, forKey: "UITableViewReloadDataAnimationKey")
tarafından
Teşekkür ederim cevabınız için. İstediğim gibi bir sonuca erişemedim. Benim aslında elde etmek istediğim sonucta şu detay var: Öyle bir formül uygulamalıyım ki, bana elimdeki textin cihazın height ve width ölçülerine ve font boyutuna göre hesaplama yaparak split etsin.  Ben font boyutunu değiştirince bu formül yeniden devreye girsin ve hesaplama yapsın.  Tıpkı Apple iBooks'taki gibi kısaca.

Bu tableview ve diğer şekilde tam olarak istediğime ulaşamadım.
...