JScrollView_PageControl_AutoScroll 阅读心得

来源:互联网 发布:淘宝未按约定发布商品 编辑:程序博客网 时间:2024/06/05 18:29
UIScrllView的一些代理方法


#pragma mark UIScrollViewDelegate


// 触摸屏幕来滚动画面还是其他的方法使得画面滚动,皆触发该函数
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    NSLog(@"Scrolling...");
}


// 触摸屏幕并拖拽画面,再松开,最后停止时,触发该函数
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    NSLog(@"scrollViewDidEndDragging  -  End of Scrolling.");
}


// 滚动停止时,触发该函数


- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    NSLog(@"scrollViewDidEndDecelerating  -   End of Scrolling.");
}


// 调用以下函数,来自动滚动到想要的位置,此过程中设置有动画效果,停止时,触发该函数


// UIScrollView的setContentOffset:animated:     这个被定时器使用,animated设置成了YES


// UIScrollView的scrollRectToVisible:animated:


// UITableView的scrollToRowAtIndexPath:atScrollPosition:animated:


// UITableView的selectRowAtIndexPath:animated:scrollPosition:


- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
    NSLog(@"scrollViewDidEndScrollingAnimation  -   End of Scrolling.");
}


///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>///


有人说这个实现其实就一个跑马灯的实现。,目前来看使用FIFO也是可以实现的。这样实用的是固定3个imageView,而且始终使用这3个View




JScrollView_PageControl_AutoScroll的实现 这个有个缺陷就是如果图片只有一张时,也会自动循环播放,且pageController也会有一个小点点,这个地方需要改造!!!!
在初始化时会生成一个imageView的数组,讲当前所有的image放到数组中去,后面切换的是imageView。 这个地方可以替换成image数组,在使用sd_iimageDownLoad会不会好些。
这里是的无限循环,定时刷新图片,其主要的原理就是,其实没次只载入三种图片,firstImageView,middleImageView,lastImageView,但是每次显示的时候显示的是middleImageView
    CGSize scrollSize=_scrollView.bounds.size;
    [firstView setFrame:CGRectMake(0, 0, scrollSize.width, scrollSize.height)];
    [middleView setFrame:CGRectMake(scrollSize.width, 0, scrollSize.width, scrollSize.height)];
    [lastView setFrame:CGRectMake(scrollSize.width*2, 0, scrollSize.width, scrollSize.height)];
    [_scrollView addSubview:firstView];
    [_scrollView addSubview:middleView];
    [_scrollView addSubview:lastView];
    //自动timer滑行后自动替换,不再动画
    [_scrollView setContentOffset:CGPointMake(self.bounds.size.width, 0) animated:NO]; --这个就是通过设置contentOffset值来确定当前显示的是middleImageView。




要实现无限循环,则需要对page进行处理, page处理包括两个方面
1. 定时器
直接对当前的page值就行循环加,如果超过最大一个则置成0,然
后调用[_scrollView setContentOffset:CGPointMake(self.bounds.size.width*2, 0) animated:YES];
这句话的作用就是设置contentOffset值时携带动画,当动画停止时contentOffset才会改变,所以如果你只是animated:NO,则contentOffset会立即改变
设置了YES,在动画结束后会调用- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{[self reloadData];}
2. 手左右滑动
直接走到- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{其中  scrollView.contentOffset.x; 已经修改掉,主要修改过程是左滑x=0,右滑x=640}
因为一开始就只载入3张,且那时contentOffset置在中间,所以只能左滑右滑一次
计算好page,计算规则是
如果是右滑,当达到最大值,page则=0,否则page++;
如果是左滑,当达到最小值,page则=[array count]-1,否则page--;
调用{[self reloadData];}设置当前page的3个imageview的内容




-(void)reloadData实现过程
{

1. 将3个imageView从当前scrollView中移除
    [firstView removeFromSuperview];
    [middleView removeFromSuperview];
    [lastView removeFromSuperview];
2. 根据当前的page重新计算得到3个view对应的imageView
这里分了3个逻辑
a. page = 0;
b. page =[_viewArray count]-1
c. 介于两者之间


3. 重新设置3个view的frame,这里重点提到下x坐标 fristView = 0; middleView=mainScreen.size.width;lastView=mainScreen.size.width*2;


4. 设置scrollView的contentOffset为middleView.x
[_scrollView setContentOffset:CGPointMake(self.bounds.size.width, 0) animated:NO]; ===z这里应该有个大的疑问,就是通过滑动或者定时器进入到这里时,其实载入的图像已经改变了,为何还要调用这个了,其实仔细观察这里的middleView就是已经被滑动过来当前显示的view,这里要重新设置下当地的scroll的contentOffset为millde才能方便后面的滑动和定时器的滑动。
}


建议以上的的firstView修改成prevView,middleView修改成currentView,lastView修改成NextView,这样更好理解些。
这些如何配合现有的SDW?的载入图像的第三方库实现了???

0 0
原创粉丝点击