2013-11-04 17 views
5

için otomatik gezinme özelliği Google'a sahibim ve bunun için arama yapın ancak sorunumu çözmek için İnternet'te hiçbir şey bulamadım ancak sorunumun çözülmesi çok kolay olacak ama bence doğru anahtar kelimeyi bulamıyorum. o.UILabel

Okuma metnini okuyabilmek için çok uzun bir metni olan bir görünüm olan ReadingView adlı bir metin içeren bir viewcontroller sahibim. Kullanıcı ReadingView gittiğinizde, kendi başına dibine kadar Autoscroll edecek, kullanıcı i sorun bu kodun

[UIScrollView beginAnimations:@"scrollAnimation" context:nil]; 
[UIScrollView setAnimationDuration:1.0f]; 
[scroll setContentOffset:CGPointMake(x, y)]; 
[UIScrollView commitAnimations]; 
tarafından sorunsuz autoscrolling yapmak CAN olduğunu

uygulanan UISlider tarafından kaydırma hızını artırabilir

ancak yukarıdaki kod zamana göre belirlenir. Çerçeve veya piksele dayalı bir animasyon bulmalıyım. Çünkü, uzun metraj çok yavaş olacak, çünkü zamana göre animasyon kullandıysanız, bazı metin çok uzun, çok hızlı bir şekilde aşağıya doğru kayar.

i

gibi animasyon yapabiliyorsa siz bir fikrin var mı "Scrollview Hey her FRAME sen bağlamda sonuna kadar 10 piksel aşağı taşımak için var ve ne kadar süre umrumda değil O alır, Sabit hız! "

Eğer bana Fogmeister en tavsiye tarafından Done bir anahtar sözcük ya da bir şey

GÜNCELLEME vererek bana yardımcı olabilir, yardımlarınız için teşekkür ederiz. Konsept, blok animasyonu kullanmak ve zaman = metin uzunluğu/hızı kullanarak her metnin zamanını hesaplamaktır ve her metnin farklı zamanını alacak ve bu işlemi animasyon yapmak için kullanacaksınız. Bunu asla düşünmüyorum .... her zaman aradığım şey yanlış bir anahtar kelime olan PIXEL tarafından animasyon yapmak için işlev.

CGFloat scrollingPointSpeed = myslider.value; //value of UI Slider// 
CGFloat time = offset/scrollingPointSpeed ; 
[UIView animateWithDuration:time delay:0.0 options:UIViewAnimationOptionCurveLinear animation:^() 
{ 
self.scroll.contentOffset = CGPointMake(0, offset); 
} 
completion:nil]; 
+0

set setAğızlık uulbel – NANNAV

+0

'deki toplam satır sayısına dayalı Bu animasyon yöntemi iOS 4 veya daha yüksek sürümlerde kullanılmamalıdır. Cevabımda olduğu gibi blok tabanlı animasyonlar kullanmalısınız. – Fogmeister

cevap

3

Tamam, ilk olarak, CABasicAnimation kullanarak edilmemelidir. En iyi uygulama yöntemi blok tabanlı animasyonları kullanmaktır.

İkincisi, bu oldukça kolay olmalı. Bir kaydırma görünümünün en fazla farkı hesaplayabilir

...

CGFloat maxOffsetWidth = self.scrollView.contentSize.width - CGRectGetWidth(self.scrollView.frame); 

Bu uygulanabilir kaydırma maksimum miktardır. yani mesafe.

Şimdi, bir süre (zaman) çalışmak için aklınızda bir hızınızın olması gerekir. Saniyede 50 puan diyelim.

Demek artık o zaman sadece farklı değerler kullanmak dikey istiyorsanız bu, yatay kaydırma için ise, Açıkçası ... araya getirdiler

CGFloat maxOffsetWidth = self.scrollView.contentSize.width - CGRectGetWidth(self.scrollView.frame); 

CGFloat scrollingPointsPerSecond = 50.0; 

CGFloat time = maxOffsetWidth/scrollPointsPerSecond; 

[UIView animateWithDuration:time 
       animations:^() { 
    self.scrollView.contentOffset = CGPointMake(maxOffsetWidth, 0); 
}]; 

sağlar.

hızlı düzenleme

yukarıda animasyon fonksiyonu UIAnimationOptionCurveEaseInOut varsayılan animasyon eğrisi kullanır.Bu, kaydırma hızının başlangıçta 0'dan yavaşça hızlandıracağı ve daha sonra yavaşça 0'a yavaşça yavaşlayacağı anlamına gelir.

Muhtemelen isteyeceğiniz şey doğrusal bir harekettir. yani, kaydırma hızı tüm yol boyunca aynıdır. Bunu yapmak için yukarıdakilerden biraz farklı bir fonksiyona ihtiyacınız var. Sadece birkaç ek parametre ekler ...

[UIView animateWithDuration:time 
         delay:0.0 
        options:UIViewAnimationOptionCurveLinear 
        animation:^() { 
         self.scrollView.contentOffset = CGPointMake(maxOffsetWidth, 0); 
        } 
       completion:nil]; 

Bu, doğrusal bir hareketle tam olarak ne istediğinizi yapacağız.

+1

Teşekkür ederim! yarın test edeceğim. ve sonucu söyleyecektir. – Einzeln

+0

Awesome !!! teşekkür ederim. Metnin toplam yüksekliğini hesaplamak ve UISlider hızına bölünmek için yönteminizi kullandım. Bunun gibi süper kolay olması gerektiğini biliyorum ama çok aptal! haha teşekkürler. – Einzeln

+0

Endişeye gerek yok. Kendimi her zaman çok fazla düşünmeyi ve çok basit problemleri çok karmaşık buluyorum. Yardımcı olduğuma sevindim :) – Fogmeister