为什么比特币为什么能火起来现在这么火

iOS_UIScrollView实现无限滚动,思路与代码
UIScrollView实现无限滚动的三种思路。
当然只是我的一些用法,当然还有非常多的实现方式,如果大家有好的实现思路也可以告诉我,相互学习嘛~
UIScrollView无限滚动
第一种方式:
原理:利用结束的位置来重新设置ScrollView ContentOffset的值,让人产生视觉上的无限循环,优点:代码易懂,缺点,会创建多余的内存。
第二种方式:
原理:利用中间的两个变量来当前的View及缓冲的View,只创建两个View,将当前的View放在中间。判断滑动的位置,优先去缓冲的View找,然后结束滑动在更新当前View的image
第三种方式(这里就不讲解了):
原理:利用CollectionView来实现,代码也非常简单。一次性给数据源传入 images.count * 1000,然后默认加载的时候,跳转到 (images.count *
+ ((images.count * ) % images.count的位置就实现了
github代码地址:/MakeZL/UIScrollViewLoopDemo点击打开链接
好了。我们先看第一种实现比较简单的
第一种方式:
利用结束的位置来重新设置ScrollView ContentOffset的值,让人产生视觉上的无限循环
优点:代码易懂
缺点,会创建多余的内存。
- (void)realizeScrollLoop1{
UIScrollView *scrollView = [[UIScrollView alloc] init];
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;
scrollView.pagingEnabled = YES;
scrollView.frame = self.view.
scrollView.delegate =
[self.view addSubview:scrollView];
self.scrollView = scrollV
[scrollView setContentSize:CGSizeMake(([self.slideImages count] + 2) * scrollView.frame.size.width, 0)];
CGSize scrollViewSize = scrollView.frame.
// 遍历创建子控件
[self.slideImages enumerateObjectsUsingBlock:^(NSString *imageName, NSUInteger idx, BOOL *stop) {
UIImageView *imageView = [[UIImageView alloc] init];
imageView.image = [UIImage imageNamed:imageName];
imageView.frame = CGRectMake((idx+1) * scrollViewSize.width, 0, scrollViewSize.width, scrollViewSize.height);
[scrollView addSubview:imageView];
// 将最后一张图片弄到第一张的位置
UIImageView *imageView = [[UIImageView alloc] init];
imageView.image = [UIImage imageNamed:
self.slideImages[[self.slideImages count] - 1]];
imageView.frame = CGRectMake(0, 0, scrollViewSize.width, scrollViewSize.height);
[scrollView addSubview:imageView];
// 将第一张图片放到最后位置,造成视觉上的循环
UIImageView *lastImageView = [[UIImageView alloc] init];
lastImageView.image = [UIImage imageNamed:
self.slideImages[0]];
lastImageView.frame = CGRectMake(scrollViewSize.width * ([self.slideImages count] + 1), 0, scrollViewSize.width, scrollViewSize.height);
[scrollView addSubview:lastImageView];
[scrollView setContentOffset:CGPointMake(scrollViewSize.width, 0)];
然后再UIScrollView的delegate里面实现即可
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
NSInteger page = scrollView.contentOffset.x / scrollView.frame.size.
// 如果当前页是第0页就跳转到数组中最后一个地方进行跳转
if (page == 0) {
[scrollView setContentOffset:CGPointMake(scrollView.frame.size.width * ([[self slideImages] count]), 0)];
}else if (page == [[self slideImages] count] + 1){
// 如果是第最后一页就跳转到数组第一个元素的地点
[scrollView setContentOffset:CGPointMake(scrollView.frame.size.width, 0)];
是不是很简单。下面我们来看第二种
第二种方式,带缓存:
第二种方式:
利用中间的两个变量来当前的View及缓冲的View,最多创建三个View,将当前的View放在中间。判断滑动的位置,优先去缓冲的View找
优点:对内存消耗少,缺点:代码相比要复杂一丝丝
- (void) realizeScrollLoop2{
status = ScrollViewLoopStatusR
UIScrollView *scrollView = [[UIScrollView alloc] init];
scrollView.pagingEnabled = YES;
scrollView.frame = self.view.
scrollView.delegate =
[self.view addSubview:scrollView];
self.scrollView = scrollV
CGSize scrollViewSize = scrollView.frame.
scrollView.contentSize = CGSizeMake(3 * scrollViewSize.width, 0);
scrollView.contentOffset = CGPointMake(scrollViewSize.width, 0);
UIImageView *currentView = [[UIImageView alloc] init];
currentView.tag = 0;
currentView.frame = CGRectMake(scrollViewSize.width, 0, scrollViewSize.width, scrollViewSize.height);
currentView.image = [UIImage imageNamed:@"00.jpg"];
[scrollView addSubview:currentView];
self.currentView = currentV
[self resuingView];
self.index = 0;
实现UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (status == ScrollViewLoopStatusResuing) {
if (scrollView.contentOffset.x > _currentView.frame.origin.x) {
NSInteger val = self.index + 1;
if (self.index >= [self.slideImages count] - 1) {
// 取缓冲区的View
self.resuingView.image = [UIImage imageNamed:[NSString stringWithFormat:@"0%zd.jpg",val]];
self.resuingView.x = CGRectGetMinX(_currentView.frame) + _currentView.
self.isLastScrollDirection = YES;
NSInteger val = self.index - 1;
if (val < 0) {
val = [self.slideImages count]-1;
self.resuingView.image = [UIImage imageNamed:[NSString stringWithFormat:@"0%zd.jpg",val]];
self.resuingView.x = 0;
self.isLastScrollDirection = NO;
要再结束的时候把当前currentView的image赋&#20540;最新的。
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
// 是否是往右边滑动
if (self.isLastScrollDirection) {
self.index++;
self.index--;
if (self.index
[self.slideImages count]-1){
self.index = 0;
_currentView.image = [UIImage imageNamed:[NSString stringWithFormat:@"0%zd.jpg",self.index]];
这样就能实现无限循环了UIScrollView不能滚动 -
- ITeye技术网站
博客分类:
UIScrollview手动写的代码,滚动的相关属性都设了,可它就是不能滚动。原来是因为ContentSize跟初始化时的frame都设成了一样大。应该是frame高度要小于ContentSize的。
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 50, self.frame.size.width, self.frame.size.height)];
scrollView.pagingEnabled = YES;
[scrollView setScrollEnabled:YES];
[scrollView setShowsHorizontalScrollIndicator:NO];
[scrollView setShowsVerticalScrollIndicator:NO];
[scrollView setContentSize:CGSizeMake(self.frame.size.width, 980)];
scrollView.delegate =
[self addSubview:scrollView];
wenxin2009
浏览: 180859 次
来自: 上海
你这东西直接拷贝过来,还一大堆注释的代码,而且没有解释说明,怎 ...
PerfectHand 写道为什么没有 sql那一部分呢 求s ...
sql那部分就跟平常sql一样,一个update语句
为什么没有 sql那一部分呢 求sql 那一部分
有源代码吗?麻烦上传一下,谢谢了!iOS-利用UIScrollView实现展示图片的无限滚动及自动滚动 - 郭晓 - 推酷
iOS-利用UIScrollView实现展示图片的无限滚动及自动滚动 - 郭晓
GXViewController.m
自动滚动及无线循环
Created by 郭晓 on 14-3-7.
Copyright (c) 2014年 郭晓. All rights reserved.
9 #import &GXViewController.h&
11 #define kCount 6
//图片总张数
13 static long step = 0; //记录时钟动画调用次数
15 @interface GXViewController () &UIScrollViewDelegate&
UIScrollView *_scrollV
UIImageView
*_currentImageV //当前视图
UIImageView
*_nextImageV
//下一个视图
UIImageView
*_previousV
//上一个视图
CADisplayLink
BOOL _isD //当前是否正在拖拽
28 @implementation GXViewController
30 - (void)viewDidLoad
[super viewDidLoad];
CGFloat width = self.view.bounds.size.
CGFloat height = self.view.bounds.size.
_scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
_scrollView.contentSize = CGSizeMake(3 * width, 0);
_scrollView.showsHorizontalScrollIndicator = NO;
_scrollView.pagingEnabled = YES;
_scrollView.delegate =
_scrollView.bounces = NO;
_scrollView.contentOffset = CGPointMake(width, 0);
[self.view addSubview:_scrollView];
//初始化当前视图
_currentImageView = [[UIImageView alloc] init];
_currentImageView.image = [UIImage imageNamed:@&01.jpg&];
_currentImageView.frame = CGRectMake(width, 0, width, height);
_currentImageView.contentMode = UIViewContentModeScaleAspectF
[_scrollView addSubview:_currentImageView];
//初始化下一个视图
_nextImageView = [[UIImageView alloc] init];
_nextImageView.image = [UIImage imageNamed:@&02.jpg&];
_nextImageView.frame = CGRectMake(width * 2, 0, width, height);
_nextImageView.contentMode = UIViewContentModeScaleAspectF
[_scrollView addSubview:_nextImageView];
//初始化上一个视图
_previousView = [[UIImageView alloc] init];
_previousView.image = [UIImage imageNamed:@&06.jpg&];
_previousView.frame = CGRectMake(0, 0, width, height);
_previousView.contentMode = UIViewContentModeScaleAspectF
[_scrollView addSubview:_previousView];
// 时钟动画
_timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(update:)];
[_timer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
73 #pragma mark 时钟动画调用方法
74 - (void)update:(CADisplayLink *)timer
if ((step % 120 != 0) || _isDraging) {
CGPoint offset = _scrollView.contentO
offset.x += 320;
if (offset.x & 640) {
offset.x = 320;
[_scrollView setContentOffset:offset animated:YES];
92 #pragma mark - 代理方法
93 #pragma mark 准备开始拖动
94 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
_isDraging = YES;
99 #pragma mark 视图停止滚动
100 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
_isDraging = NO;
106 #pragma mark 已经拖动
107 - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
static int i = 1;//当前展示的是第几张图片
float offset = scrollView.contentOffset.x;
if (_nextImageView.image == nil || _previousView.image == nil) {
//加载下一个视图
NSString *imageName1 = [NSString stringWithFormat:@&0%d.jpg&, i == kCount ? 1 : i + 1];
_nextImageView.image = [UIImage imageNamed:imageName1];
//加载上一个视图
NSString *imageName2 = [NSString stringWithFormat:@&0%d.jpg&, i == 1 ? kCount : i - 1];
_previousView.image = [UIImage imageNamed:imageName2];
if (offset == 0) {
_currentImageView.image = _previousView.
scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
_previousView.image =
if (i == 1) {
if (offset == scrollView.bounds.size.width * 2) {
_currentImageView.image = _nextImageView.
scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
_nextImageView.image =
if (i == kCount) {
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 比特币为什么火 的文章

 

随机推荐