1.scrollView的介绍

scrollView是UI中的基础视图,他有着至关重要的作用,也是我们在UI中常用的控件。他的代理有很多我们需要用,这里我们就不再一一介绍了。

2.简单scrollView的使用

(1)scrollView的使用方法非常简单,首先先声明scrollView对象,定义对象的坐标和大小,需要用到代理的时候就声明一下代理scrollView.delegate = self;然后将其加入视图中。

(2)在将需要在scrollView中需要先向的控件声明,定义坐标及大小。然后加入scroll中

(3)假如我们scroll中的控件在一个屏幕中不够显现,这是后句需要扩展scroll。用多少扩展多少

(4)scroll在Masonry(第三方库)使用约束时候需要注意,滚动的方向的两边约束不能对比scroll,否则scrollView滚动不了

3.重用scrollView

(1)当我们放入scrollView中的控件所占内存比较大时,容易造成手机卡死。那么我们就需要减少scrollView中的内存。所以我们想到了重用scrollView。

(2)步骤

  【1】重用scroll我们一般需要三个屏幕宽度,当前显示在中间,两边各有一张备用屏幕(先不考虑最左边和最右边)。

  【2】使用scrollView中的一个代理:作用是滑动之后会调用这个代理。

  - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

  假设我们的滚动视图为横向滚动,使用:

  int page = (scrollView.contentOffset.x)/scrollView.frame.size.width;的到当前的是第几页

  然后重用scrollView,将当前页数设为scrollView三页中的最中间的页数

  【3】还要考虑最左边和最右边,判断一下是不是在最左边或者是最右边。如果是则

  假如是最左边

     我们就不要左边的一张图,并且在代理个函数中写当为第一页时,不支持像左边滑动

  假如是最右边

    我们就不要右边的一张图,且不支持向右滑动

4.代码DEMO

   int n = ;
int m = ;
if (self.withimage == self.allarr.count - || self.withimage == ) {
n = ;
}
//如果只有一张图片
if(self.allarr.count == )
{
self.addscroll = [[addTapandImageGToScroll alloc] initWithFrame:CGRectMake(WIDTH, , WIDTH, HEIGHT)];
UIImage * image = self.allarr[self.withimage];
self.addscroll.iamgeV.frame = self.frame;
NSLog(@"%@",NSStringFromCGRect(self.frame));
[self.Scroller addSubview:self.addscroll];
[UIView animateWithDuration: animations:^{
CGSize imagesize = image.size;
double pror = WIDTH/imagesize.width;
self.addscroll.iamgeV.frame = CGRectMake(, (HEIGHT - pror * HEIGHT)/, WIDTH, pror * HEIGHT);
}];
}
for (int i = ; i < n; i ++)
{
self.addscroll = [[addTapandImageGToScroll alloc] initWithFrame:CGRectMake(WIDTH * i, , WIDTH, HEIGHT)];
UIImage * image ;
if (self.withimage == ) {
image = self.allarr[self.withimage + i];
}
else
{
image = self.allarr[self.withimage - + i];
} NSLog(@"++++++++++++++++++++++%d",self.withimage - + i);
self.addscroll.iamgeV.tag = i;
self.addscroll.iamgeV.image = image;
int s;
if (self.withimage == ) {
s = ;
}
else
{
s = ;
} if (i == s && firstShowAnimateimage == ) {
self.addscroll.iamgeV.frame = self.frame;
NSLog(@"%@",NSStringFromCGRect(self.frame));
[self.Scroller addSubview:self.addscroll];
[UIView animateWithDuration: animations:^{
CGSize imagesize = image.size;
double pror = WIDTH/imagesize.width;
self.addscroll.iamgeV.frame = CGRectMake(, (HEIGHT - pror * HEIGHT)/, WIDTH, pror * HEIGHT);
}];
firstShowAnimateimage = firstShowAnimateimage + ;
}
else
{
[self.Scroller addSubview:self.addscroll];
CGSize imagesize = image.size;
double pror = WIDTH/imagesize.width;
self.addscroll.iamgeV.frame = CGRectMake(, (HEIGHT - pror * HEIGHT)/, WIDTH, pror * HEIGHT);
} //设置下面的属性
self.addscroll.userInteractionEnabled = YES;
self.addscroll.iamgeV.userInteractionEnabled = YES;
//设置点击一次事件
self.addscroll.block = ^(addTapandImageGToScroll *add)
{
if (tapnumber == )
{
weakself.viewBack.hidden = NO;
tapnumber = ;
}
else
{
weakself.viewBack.hidden = YES;
tapnumber = ;
}
};
} self.Scroller.contentSize = CGSizeMake(WIDTH * (n - m), );
NSLog(@"%d",self.index);
if (self.withimage == ) {
self.Scroller.contentOffset = CGPointMake(, );
}
else
{
self.Scroller.contentOffset = CGPointMake(WIDTH * , );
} self.nowimagedex = ;
saveimage = self.allarr[self.withimage];
[self addSome]; - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
//关于手势
tapnumber = ; if (self.allarr.count == ) {
return;
} int page = (scrollView.contentOffset.x)/scrollView.frame.size.width;
NSLog(@"%d",page); if (self.withimage == && page == ) {
return;
} self.nowimagedex = page;
self.labeltitle.text = self.allname[ page];
[self.labeltext setDefaultStyleBy:self.alltext[page]];
CGFloat height = [self.labeltext heightForStringByWidth:WIDTH];
self.scrollText.contentSize = CGSizeMake(, height);
if (height+>HEIGHT*0.5){
self.viewBack.frame = CGRectMake(, HEIGHT*0.5, WIDTH, HEIGHT*0.5);
}else
{
self.viewBack.frame = CGRectMake(, HEIGHT-height-, WIDTH, height+);
}
saveimage = self.allarr[page]; if (page == )
{
self.withimage = self.withimage - ;
[self showImageWithScroll];
}
if (page == )
{
self.withimage = self.withimage + ;
[self showImageWithScroll];
}
if (page == && self.withimage == ) {
self.withimage = self.withimage + ;
[self showImageWithScroll]; }
}

      

IOS开发篇UI之重用scrollView的更多相关文章

  1. IOS开发-UI学习-sqlite数据库的操作

    IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...

  2. iOS开发——高级UI—OC篇&退出键盘

    退出键盘 iOS开发中键盘的退出方法用很多中我们应该在合适的地方使用合适的方法才能更好的提高开发的效率和应用的性能 下面给大家介绍几种最常用的键盘退出方法,基本上iOS开发中的键盘退出方法都是这几种中 ...

  3. IOS开发中UI编写方式——code vs. xib vs.StoryBoard

    最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问,就是应该如何制作UI界面.iOS应用是非常重视用户体验的,可以说绝大多数的应用成功与否与交互设计以及UI是否漂亮易用有着非常大的关 ...

  4. iOS开发——高级UI&带你玩转UITableView

    带你玩装UITableView 在实际iOS开发中UITableView是使用最多,也是最重要的一个控件,如果你不会用它,那别说什么大神了,菜鸟都不如. 其实关于UItableView事非常简单的,实 ...

  5. IOS开发-UI学习-delegate(代理)的使用,键盘消失

    代理是IOS开发中用到的一种设计模式.今天做了一个代理的小练习: 以下项目实现了两个页面之间的相互切换,并且在切换页面的时候完成了从一个页面往另一个页面的传值.从主页面往其他页面传值是容易的,但是反过 ...

  6. iOS开发——高级UI之OC篇&UIdatePicker&UIPickerView简单使用

    UIdatePicker&UIPickerView简单使用 /***************************************************************** ...

  7. 【ios开发】UITableViewCell的重用

    移动开发需要解决的一个问题就是资源稀缺的问题.多数情况下是内存问题. 虽然现在的手机都号称大内存,高配置.但是移动app所占用的资源也在跟着不断膨胀, 也是造成内存不足的主要原因. 在前面的例子中,还 ...

  8. iOS开发~UI布局(三)深入理解autolayout

    一.概要 通过对iOS8界面布局的学习和总结,发现autolayout才是主角,autolayout是iOS6引入的新特性,当时还粗浅的学习了下,可是没有真正应用到项目中.随着iOS设备尺寸逐渐碎片化 ...

  9. iOS开发~UI布局(二)storyboard中autolayout和size class的使用详解

    一.概要:前一篇初步的描述了size class的概念,那么实际中如何使用呢,下面两个问题是我们一定会遇到的: 1.Xcode6中增加了size class,在storyboard中如何使用? 2.a ...

随机推荐

  1. class tuple

    class tuple(object): """ tuple() -> empty tuple tuple(iterable) -> tuple initia ...

  2. [网络]远程访问局域网svn服务器[转]

    转至:http://8474832.blog.51cto.com/8464832/1555449 打开路由器访问界面 选择转发规则->端口映射-新建 在弹出的界面中填写相应的端口号了内网ip 填 ...

  3. mongodb高级操作及在Java企业级开发中的应用

    Java连接mongoDB Java连接MongoDB需要驱动包,个人所用包为mongo-2.10.0.jar.可以在网上下载最新版本. package org.dennisit.mongodb.st ...

  4. How a non-windowed component can receive messages from Windows -- AllocateHWnd

    http://www.delphidabbler.com/articles?article=1 Why do it? Sometimes we need a non-windowed componen ...

  5. On-board diagnostics -- Standards documents

    http://en.wikipedia.org/wiki/On-board_diagnostics#Standards_documents SAE standards documents on OBD ...

  6. C++ Interview - using new and delete to alloc and free memory

    1. dynamic create object and initialization int *pi = new int; // pi points to an uninitialized int ...

  7. Codeforce Gym 100015I Identity Checker 暴力

    Identity Checker 题目连接: http://codeforces.com/gym/100015/attachments Description You likely have seen ...

  8. Robot Instructions

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  9. CCScrollView/CCTableView(CCTableViewDelegate CCTableViewDataSource CCTableView-滑动列表-游戏中大量使用 非常重要的一个类)

    tableview scrollViewDidScroll函数中有一段   ----  即---滑动tableview时触发的函数 : 会将全部显示的cell又一次刷新(刷新函数中调用了自己定义的ta ...

  10. Category目录

    Category目录 目录 概述——对Category的理解 创建Category Category的用途 概述——对Category的理解 当我们想往原有的类中添加新的成员方法但又不想改变原有的类和 ...