2013-03-13 1 views
3

У меня есть этот Scrollview:Как я могу сделать scrollView autoscroll?

self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; 
self.scrollView.autoresizingMask = UIViewAutoresizingFlexibleHeight; 
self.scrollView.contentSize = CGSizeMake(320,3000); 


_scrollView.frame = CGRectMake(0, 45, 320, 420); 

, и я хочу, чтобы сделать его автопрокрутку очень медленно вниз до конца, так что пользователь может видеть содержимое (как в титрах фильма), в конце концов с кнопкой остановки/воспроизведения , но следить за жестов пользователя при касании интерфейса.

Как это сделать? Спасибо,

ответ

2

этот адаптированный код сделал трюк (источник http://sugartin.info/2012/01/21/image-sliding-page-by-page-uiscrollview-auto-scrolling-like-image-slider/)

PS: каждое изображение 280 на 200

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

UIScrollView *scr=[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
scr.tag = 1; 
scr.autoresizingMask=UIViewAutoresizingNone; 
[self.view addSubview:scr]; 
[self setupScrollView:scr]; 
UIPageControl *pgCtr = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 264, 480, 36)]; 
[pgCtr setTag:12]; 
pgCtr.numberOfPages=10; 
pgCtr.autoresizingMask=UIViewAutoresizingNone; 
[self.view addSubview:pgCtr]; 
} 

    - (void)setupScrollView:(UIScrollView*)scrMain { 
// we have 10 images here. 
// we will add all images into a scrollView & set the appropriate size. 

for (int i=1; i<=10; i++) { 
    // create image 
    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"sti%02i.jpg",i]]; 
    // create imageView 
    UIImageView *imgV = [[UIImageView alloc] initWithFrame:CGRectMake(20, ((i-1)*scrMain.frame.size.height+100), 280, 200)]; 
    // set scale to fill 
    imgV.contentMode=UIViewContentModeScaleToFill; 
    // set image 
    [imgV setImage:image]; 
    // apply tag to access in future 
    imgV.tag=i+1; 
    // add to scrollView 
    [scrMain addSubview:imgV]; 
} 
// set the content size to 10 image width 
[scrMain setContentSize:CGSizeMake(scrMain.frame.size.width, scrMain.frame.size.height*10)]; 
// enable timer after each 2 seconds for scrolling. 
[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(scrollingTimer) userInfo:nil repeats:YES]; 


} 

- (void)scrollingTimer { 
// access the scroll view with the tag 
UIScrollView *scrMain = (UIScrollView*) [self.view viewWithTag:1]; 
// same way, access pagecontroll access 
UIPageControl *pgCtr = (UIPageControl*) [self.view viewWithTag:12]; 
// get the current offset (which page is being displayed) 
CGFloat contentOffset = scrMain.contentOffset.y; 
// calculate next page to display 
int nextPage = (int)(contentOffset/scrMain.frame.size.height) + 1 ; 
// if page is not 10, display it 
if(nextPage!=10) { 


    [scrMain scrollRectToVisible:CGRectMake(0, nextPage*scrMain.frame.size.height, scrMain.frame.size.width, scrMain.frame.size.height) animated:YES]; 
    pgCtr.currentPage=nextPage; 
    // else start sliding form 1 :) 


} else { 

    [scrMain scrollRectToVisible:CGRectMake(0, 0, scrMain.frame.size.width, scrMain.frame.size.height) animated:YES]; 
    pgCtr.currentPage=0; 
} 
} 
1

Вы можете установить x, если вы хотите прокручивать по горизонтали, иначе установите y для прокрутки по вертикали.

[_scrollView setContentOffset:CGPointMake(x, y) animated:YES]; 

и соответствующим образом изменить координаты.

+0

спасибо, как я могу ввести задержку, чтобы пользователь мог видеть контент до этого места? – Mihai

4

Вы можете использовать:

[_scrollView setContentOffset:CGPointMake(x,y) animated:YES]; 

и использовать х и у, как точки касания на экране вы можете захватить.

Вы также можете сделать анимацию с CoreAnimation:

[UIScrollView beginAnimations:@"scrollAnimation" context:nil]; 
[UIScrollView setAnimationDuration:1.0f]; 
[scroll setContentOffset:CGPointMake(x, y)]; 
[UIScrollView commitAnimations]; 
+0

Извините, что я новичок, что такое x, y должен быть изменен? – Mihai

+0

координаты на экране x - горизонтальное расположение касания, y - вертикальное. – ApolloSoftware

+0

значения действительны: 0 .. Ширина экрана/Высота макс. Например, iPad без сетчатки - 768x1024 для полноэкранного просмотра в портретной ориентации. Тинкер со значениями, и вы увидите. – ApolloSoftware