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. Android_UI_点击按钮切换背景效果实现

    实现按钮按下和释放,按钮背景图片相应切换效果的方法这里介绍两种,一种是在代码里实现,另一种是在xml文件里实现 一.在xml文件里 首先现在layout的一个xml文件下定义Button如下所示: [ ...

  2. HDU 5164Matching on Array(AC自动机)

    这是BC上的一道题,当时比赛没有做,回头看看题解,说是AC自动机,想着没有写过AC自动机,于是便试着抄抄白书的模板,硬是搞了我数个小时2000ms时限1800过了= = ! 这里就直接贴上BC的结题报 ...

  3. LDA(Latent Dirichlet Allocation)

    转自:http://leyew.blog.51cto.com/5043877/860255#559183-tsina-1-46862-ed0973a0c870156ed15f06a6573c8bf0 ...

  4. oracle 学习笔记--用户管理

    oracle 用户管理 创建用户(需要具有dba权限的用户) create user 用户名 identified by 密码 defaule tablespace users     //默认表空间 ...

  5. PowerDesigner 业务处理模型( BPM ) 说明 及Enterprise Architect使用教程

    http://www.cnblogs.com/springside-example/archive/2011/10/17/2529640.html http://wenku.baidu.com/lin ...

  6. 28.怎样在Swift中实现单例?

    1.回忆一下OC中的单例实现 //AFNetworkReachabilityManager中的单例,省略了其他代码 @interface AFNetworkReachabilityManager : ...

  7. git强制覆盖本地文件

    git fetch --all git reset --hard origin/master

  8. css去掉a标签点击后的虚线框(转自网络)

    outline是css3的一个属性,用的很少. 声明,这是个不能兼容的css属性,在ie6.ie7.遨游浏览器都不兼容. outline控制的到底是什么呢? 当聚焦a标签的时候,在a标签的区域周围会有 ...

  9. jcmd命令使用

    概述 在JDK 1.7之后,新增了一个命令行工具jcmd. 它是一个多功能工具,能够用来导出堆,查看java进程,导出线程信息.运行GC等. 使用演示样例 以下这个命令能够列出当前运行的全部虚拟机: ...

  10. \r,\n,\t

    \r:回车符,返回到这一行的开头,return的意思. \n:换行符,到下一行的同一位置,纵坐标相同,new line的意思. \t:制表符,为了在不使用表格的情况下,上下对齐,table的意思. E ...