显示图片时候怎么拿到图片的个数不写死了iOS

IOS 05 UIScrollView介绍 图片轮播器
IOS 05 UIScrollView介绍 图片轮播器
要想完成上述功能,前提条件就是能够监听到UIScrollView的整个滚动过程
? 当UIScrollView发?生?一系列的滚动操作时, 会?自动通知它的代理(delegate)对象,给
它的代理发送相应的消息,让代理得知它的滚动情况 ? 也就是说,要想监听UIScrollView的滚动过程,就必须先给UIScrollView设置?一个代理
对象,然后通过代理得知UIScrollView的滚动过程&
// ?用户开始拖拽时调?用
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollV
// 滚动到某个位置时调?用
- (void)scrollViewDidScroll:(UIScrollView *)scrollV
// ?用户结束拖拽时调?用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate: (BOOL)&
UIScrollView的常?见属性
? @property(nonatomic)CGPointcontentO ? 这个属性?用来表?示UIScrollView滚动的位置
? @property(nonatomic)CGSizecontentS ? 这个属性?用来表?示UIScrollView内容的尺?寸,滚动范围(能滚多远)
? @property(nonatomic)UIEdgeInsetscontentI ? 这个属性能够在UIScrollView的4周增加额外的滚动区域&
2 介绍完UIScrollView的基本属性,下面做一个小的图片轮播器程序:
2.1程序截图如下图。
2.2这个程序上有5个图,当滑动屏幕时,屏幕上的图片也会跟着变化,同时导航按键也会跟着变动,同时如果不滑动屏幕时,每过两秒,屏幕图片也自己变化,程序就是这么个功能,在很多APP中可以常看到,下面讲代码。
2.3 设计视图,视图比较简单,只有一个Scroll View和一个page control,如下:
2.4 视图设计好以后,然后导入图片到项目中,这里我们简单点做就把图片放到项目中Imagees.xcassets中。
2.5 做完这些之后,然后就要写代码实现功能了,第1步,创建Scroll View和page control的属性,如何创建属性不讲了。
//Scroll View属性
@property (weak, nonatomic) IBOutlet UIScrollView *ScllV
//pageControl属性
@property (weak, nonatomic) IBOutlet UIPageControl *PageC
2.6 创建完视图上的两个控件的属性后,我们就要开始读取图片保存然后保存到Scroll View中了,代码如下:
//创建UIImageView在Scrool view中的位置
//W.H,Y值对是一样的,但每个UIImageView的X值就会不一样了
CGFloat FloatW=self.ScllView.frame.size.
CGFloat FloatH=self.ScllView.frame.size.
CGFloat FloatY=0;
//这里5张图片写死了,循环所有图片
//创建UIimageView,然后设置每个UIimageView的位置,
for (int i=0; i&imageC i++) {
UIImageView *imageView=[[UIImageView alloc] init];
//计算X值,
CGFloat FloatX=i*FloatW;
imageView.frame=CGRectMake(FloatX, FloatY, FloatW, FloatH);
NSString *imagename=[NSString stringWithFormat:@&img_0%i&,i+1];
imageView.image=[UIImage imageNamed:imagename];
//把UIImageView增加到Scroll View中
[self.ScllView addSubview:imageView];
在这里最主要的就是要计算每个UIiamgeView的X值了,其实X值也简单因为每个图片的W值和Scroll View一样,所以每个UIiamgeView的X值就可以*ScllView.frame.size.width值就可以了。
2.7这样我们就把图片全部加到视图上的Scroll View 中了,然后就要让Scrool View里面的图片可以滑动,要让Scrool View里面的图片可以滑动,我们就要用到代理,用到代理就要导入UIScrollViewDelegate,如下:
@interface ViewController ()&UIScrollViewDelegate&
导入完UIScrollViewDelegate后,然后设置Scrool View相对应的属性:
PagingEnabled这个分页的属性是每一次滑动都是滑动一整个图片,让屏幕只能显示一张完整的图片,
同时设置视图中page control控件的个数,当然这个个数和图片的个数是一样多的。
//2.滚动视图的内容的大小
self.ScllView.contentSize=CGSizeMake(FloatW *imageCont, 0);
//去掉水平指示器
self.ScllView.showsHorizontalScrollIndicator=NO;
//设置分页
self.ScllView.pagingEnabled=YES;
//设置pageControl显示的页数
self.PageControl.numberOfPages=imageC
2.8 做完这些,屏幕上的图片就可能自由的滑动了,但有个小问题是屏幕上的page control这个控件不会当屏幕图片变动时也跟着变动,
这个如何实现呢?这个要在代理方法中来做,如下:
//设置代理
& & self.ScllView.delegate=
//代理方法
//代理自带方法,视图正在滚动的时候一直在执行
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
CGFloat scrolViewW=self.ScllView.frame.size.
CGFloat pageCount=(self.ScllView.contentOffset.x+scrolViewW *0.5)/scrolViewW;
self.PageControl.currentPage=pageC
这样,整个图片播放器就OK了,下面再来做个定时播放功能,当程序起动时,自动播放,多的不说了,直接上所有代码:如下
#import &ViewController.h&
#define imageCont 5
@interface ViewController ()&UIScrollViewDelegate&
//Scroll View属性
@property (weak, nonatomic) IBOutlet UIScrollView *ScllV
//pageControl属性
@property (weak, nonatomic) IBOutlet UIPageControl *PageC
@property(strong,nonatomic)NSTimer *
@implementation ViewController
//去掉手机最上面的状态显示
-(BOOL)prefersStatusBarHidden
return YES;
- (void)viewDidLoad
[super viewDidLoad];
//创建UIImageView在Scrool view中的位置
//W.H,Y值对是一样的,但每个UIImageView的X值就会不一样了
CGFloat FloatW=self.ScllView.frame.size.
CGFloat FloatH=self.ScllView.frame.size.
CGFloat FloatY=0;
//这里5张图片写死了,循环所有图片
//创建UIimageView,然后设置每个UIimageView的位置,
for (int i=0; i&imageC i++) {
UIImageView *imageView=[[UIImageView alloc] init];
//计算X值,
CGFloat FloatX=i*FloatW;
imageView.frame=CGRectMake(FloatX, FloatY, FloatW, FloatH);
NSString *imagename=[NSString stringWithFormat:@&img_0%i&,i+1];
imageView.image=[UIImage imageNamed:imagename];
//把UIImageView增加到Scroll View中
[self.ScllView addSubview:imageView];
//2.滚动视图的内容的大小
self.ScllView.contentSize=CGSizeMake(FloatW *imageCont, 0);
//去掉水平指示器
self.ScllView.showsHorizontalScrollIndicator=NO;
//设置分页
self.ScllView.pagingEnabled=YES;
//设置pageControl显示的页数
self.PageControl.numberOfPages=imageC
//设置代理
self.ScllView.delegate=
[self addTime];
//创建定时器方法
-(void)addTime{
self.timer=[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage) userInfo:nil repeats:YES ];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
//移除计时器
-(void)removeTime{
[self.timer invalidate];
self.timer =
-(void)nextPage{
int page=0;
if(self.PageControl.currentPage==imageCont-1)
page=self.PageControl.currentPage+1;
CGPoint point=CGPointMake(page *self.ScllView.frame.size.width, 0);
//设置Scroll View 要显示的图片
[self.ScllView setContentOffset:point animated:YES];
//代理方法
//代理自带方法,视图正在滚动的时候一直在执行
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
CGFloat scrolViewW=self.ScllView.frame.size.
CGFloat pageCount=(self.ScllView.contentOffset.x+scrolViewW *0.5)/scrolViewW;
self.PageControl.currentPage=pageC
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
//会将计时器永久关掉
[self removeTime];
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)d{
[self addTime];
(责任编辑:admin)
------分隔线----------------------------
eclipse启动出现“An Error has Occurred. See the log fi:!SESSION
dbidrnxrjtfyheywjimiqdixosrdd 版权声明:本文为博主原创文章,未经博主允许不得转载...
AppBugs公司研究人员经过分析发现,市面上有14款总计下载量高达8千万次的主流APP在处...
本文实例讲述了python生成随机密码或随机字符串的方法。分享给大家供大家参考。具体实...
阿里集团2016校园招聘已经启动,欢迎大家把简历发送给我,我可以帮忙内推。只要你够优...
Idea 配合 Gradle 多项目管理:# 缘起 之前一直用的是 eclipse,几次(差不多有 3、4 ...iOS 问题:UIscrollView有什么重用机制、缓存机制没?我scrollView数据太多、按页显示,图片太多时会内存警告crash,我说的是scrollview,不是tableview,求助!!!!
在网上看了下一般采用lazyLoad的加载方法,就是只加载显示页,显示页的前一页,显示页的后一页,这三个页面,比如我图片就是一个数组存起来的,我怎么实现啊,有没有这方面的Demo看一下啊,怎么做的 -
UIscrollView有什么重用机制、缓存机制没?我scrollView数据太多、按页显示,图片太多时会内存警告crash,我说的是scrollview,不是tableview,求助!!!!
在网上看了下一般采用lazyLoad的加载方法,就是只加载显示页,显示页的前一页,显示页的后一页,这三个页面,比如我图片就是一个数组存起来的,我怎么实现啊,有没有这方面的Demo看一下啊,怎么做的
共有 1 个回答
你自己都回答了呀,就是用lazyLoad的方法,每次只显示当前页面和左右两页的图像。具体demo,可以本站搜索:lazy。
登录后方可回复
登录后方可回答
耗时 0.0638 秒主题 : 怎么 控制 collectionview 每一行 元素的个数啊
我想一行显示四个
级别: 新手上路
可可豆: 20 CB
威望: 20 点
在线时间: 200(时)
发自: Web Page
怎么 控制 collectionview 每一行 元素的个数啊
我想一行显示四个&&&
级别: 新手上路
UID: 262041
可可豆: 411 CB
威望: 253 点
在线时间: 229(时)
发自: Web Page
-(NSInteger)numberOfItemsInR
这个实例是返回每行的个数的。可以试试。
级别: 新手上路
可可豆: 20 CB
威望: 20 点
在线时间: 200(时)
发自: Web Page
没有这个方法啊
级别: 新手上路
UID: 262041
可可豆: 411 CB
威望: 253 点
在线时间: 229(时)
发自: Web Page
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
级别: 新手上路
可可豆: 73 CB
威望: 7 点
在线时间: 76(时)
发自: Web Page
numberOfItemsInSection:
Returns the number of items in the specified section.
- (NSInteger)numberOfItemsInSection:(NSInteger)section
Parameters
section
The index of the section for which you want a count of the items.
Return Value
The number of items in the specified section.
Availability
Available in iOS 6.0 and later.
Declared In
UICollectionView.h
以上是官方文档说明
级别: 新手上路
UID: 286711
可可豆: 31 CB
威望: 38 点
在线时间: 115(时)
发自: Web Page
每行显示几个是系统计算出来的,你需要计算一下item的尺寸和间隔
关注本帖(如果有新回复会站内信通知您)
个人IDP证书一年费用? 正确答案:99美金
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版iOS 问题:自定义单元格,从后台请求数据,有0~3张图片,显示在单元格上,我用的是afnetworking的setImageWithUrl方法。但滑动的时候图片会串。求大神解答。 -
自定义单元格,从后台请求数据,有0~3张图片,显示在单元格上,我用的是afnetworking的setImageWithUrl方法。但滑动的时候图片会串。求大神解答。
共有 4 个回答
每次给imageView赋予图片之前 先让他=nil
登录后方可回复
@盔甲猫 : 首先感谢你回复我,嘿嘿。我现在的问题是:第一个单元格2张图片
,第二个单元格3张图片,快点滑动,第一个单元格会变成3张图片。
登录后方可回复
滑动时候不加载图片
滑动停止或者即将停止时候你在加载图片
登录后方可回复
单元格imageviw重用了
登录后方可回复
登录后方可回答
耗时 0.0726 秒

我要回帖

更多关于 ios8.3经常死机 的文章

 

随机推荐