对UIScrollView的简单理解,适用于初学者!

这是我对于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);
    }

猜你喜欢

转载自blog.csdn.net/chungeshihuatian/article/details/87268315