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. <MFC_1>深入剖析MFC的WinMain和消息机制

    一.开篇引论 熟悉Win32开发的朋友,应该非常了解它的基本组成和流程 1. WinMain:书写窗口类(WNDCLASS) -> 注册窗口类 -> 创建窗口 -> 显示窗口和更新窗 ...

  2. UVaLive 7512 November 11th (思维漏洞)

    题意:给定n*m个座椅,然后有b个是坏的,要做人,并且两个人不能相邻,问你最多坐多少人,最少坐多少人. 析:这个题其实并不难,只要当时一时没想清楚,结果就一直WA,就是最少的情况时,其实一个人可以占三 ...

  3. JPA 原生态SQL 的复杂查询之createNamedQuery

    JPA 原生态SQL 的复杂查询之createNamedQuery调用存储过程,返回的List字段对应的填充实体============实体类,调用存储过程====================== ...

  4. ASP.NET MVC- DropDownList绑定

    看一下Controller例子 [ChildActionOnly] public List<SelectListItem> LoadItemStatus() { List<Selec ...

  5. MFC中 Invalidate() , InvalidateRect() , UpdateWindow(), Redrawwindow() 区别

    1. void Invalidate( BOOL bErase = TRUE ); 该函数的作用是使整个窗口客户区无效.窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口 ...

  6. Hadoop on Mac with IntelliJ IDEA - 8 单表关联NullPointerException

    简化陆喜恒. Hadoop实战(第2版)5.4单表关联的代码时遇到空指向异常,经分析是逻辑问题,在此做个记录. 环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.5, Ha ...

  7. C#操作Word生成目录

    OperateWord ow = new OperateWord(); Microsoft.Office.Interop.Word.ApplicationClass ss = ow.WordAppli ...

  8. hdu4085 Peach Blossom Spring 斯坦纳树,状态dp

    (1)集合中元素表示(1<<i), i从0开始 (2)注意dp[i][ss] = min(dp[i][ss], dp[i][rr | s[i]] + dp[i][(ss ^ rr) | s ...

  9. AR增强现实 Augmented Reality

    增强现实(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上对应图像的技术,这样的技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这样的技术最早于19 ...

  10. jQuery 效果 - animate() 方法

    http://www.w3school.com.cn/jquery/effect_animate.asp 实例 改变 "div" 元素的高度: $(".btn1" ...