这是我对于scrollView的简单理解,希望能帮到正在看这篇博客的你,有问题也请您告知我,一起学习(本人目前处于离职中,写这篇博客也是在自我学习和积累中,从基础、原理学习)
//定义显示图片的
CGFloat kScreenWidth = self.view.bounds.size.width;
NSArray *imageNameList = @[@"200922723503567.jpg",@"200922723503567.jpg",@"200922723503567.jpg",@"200922723503567.jpg"];
UIScrollView *scrollViewRoot = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 300, kScreenWidth, self.view.frame.size.height-350)];
scrollViewRoot.backgroundColor = [UIColor redColor];
[self.view addSubview:scrollViewRoot];
// 添加图片
for (NSInteger index = 0; index < imageNameList.count; index ++) {
// UIScrollView上的每一张图片
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(index * kScreenWidth, 0, scrollViewRoot.frame.size.width, scrollViewRoot.frame.size.height)];
//加载图片方式一:一直在占用内存,并未释放,且自动识别@2x,@3x等不同分辨率的图片,会提供一个缓存,具体是在加载的时候缓存到系统内存,使用的时候从缓存中进行加载,但是过多的话会导致内存泄露等内存警告问题,imageNamed后面跟的不是图片名称,是图片集合的名称,所以关于image@2x,image@3x等,只需要写上前面的image,他们属于一个image下的图片集合,内部会根据屏幕分辨率自动识别,并进行展示
imageView.image = [UIImage imageNamed:imageNameList[index]];
//加载图片方式二:数据形式加载,不会一直加载在内存里,也就是说没有做图片缓存处理,且自动识别@2x,@3x等不同分辨率的图片
imageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageNameList[index] ofType:nil]];
//NSString *filePaht1 = [[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:@"test.bundle/hotBagImage.png"];
//加载图片方式三:数据形式加载,不会一直加载在内存里
NSData *imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageNameList[index] ofType:nil]];
imageView.image = [UIImage imageWithData:imageData];
/*
Assets.xcassets 在使用大量图片时,不推荐这种方式,我们的一些小的icon或者图片可以放置进来,我们的启动图等在这里面管理还是比较方便;
NSBundle或者ContentsOfFile方式虽然加载图片不占用内存资源,起到了性能优化,但是占的APP储存空间相对比较大,会增加包的体积。其中ContentsOfFile不同于NSBundle的是可以创建文件夹来管理图片,但是这样在多人开发中容易丢失图片文件。
*/
[scrollViewRoot addSubview:imageView];
//contentSize 为什么不从0开始,因为0*kScreenWidth等于0,就相当于没有大小,挤掉了第一张(备注:因为图片资源是从0开始的,在这里乘以0就相当于把第一张的大小变为0)
scrollViewRoot.contentSize = CGSizeMake((index+1) * kScreenWidth, 0);
}