UIimage图片加载的几种方式

图片加载的第一种方式:

- (void)viewDidLoad {
    [super viewDidLoad];
    //创建UIImage对象:指定图片为1.jpg
    UIImage *image = [UIImage imageNamed:@"1.jpg"];
    //创建UIImageView对象,指定image对象为image
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    //指定ImageView容器的位置及长宽
    imageView.frame = CGRectMake(0, 0, image.size.width, image.size.height);
    //指定图片以屏幕中心点放置
    imageView.center = CGPointMake(self.view.frame.size.width*0.5, self.view.frame.size.height*0.5);
    /*
     几种UIImage的内容模式:
         UIViewContentModeScaleToFill,  //自动适应长宽(图片会变形)
         UIViewContentModeScaleAspectFit, //自动适应宽度(如果图片过大,会被缩放)
         UIViewContentModeScaleAspectFill, //自动填充(如果图片过大,只会显示一部分)
         UIViewContentModeRedraw,   //图片重绘
         UIViewContentModeCenter,   //图片以中心点放置
         UIViewContentModeTop,      //图片以顶部放置
         UIViewContentModeBottom,   //图片以底部放置
         UIViewContentModeLeft,     //图片以左边中心点放置
         UIViewContentModeRight,    //图片以右边边中心点放置
         UIViewContentModeTopLeft,  //图片以左上角放置
         UIViewContentModeTopRight, //图片以右上角放置
         UIViewContentModeBottomLeft, //图片以左下角放置
         UIViewContentModeBottomRight, //图片以右下角放置

     */
    imageView.contentMode = UIViewContentModeScaleToFill;
    [self.view addSubview:imageView];
}

图片加载的第二种方式:

//...
//创建UIImage对象:指定图片为1.jpg
NSString *strImage = [[NSBundle mainBundle] pathForResource:@"dazhao_22" ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:strImage];

图片加载的方式:

第一种: 通过UImage的imageNamed类方法加载。第二种: 通过NSBundle对象的mainBundle 方法创建NSBundle对象后调用pathForResource方法获取图片路径。然后通过UIimage的imageWithContentsOfFile类方法创建图片对象。

两者创建的区别:

通过imageNamed类方法加载的图片,通常放置在Assets.xcassets中且也能加载ipa包路径下的图片资源。

通过imageWithContentsOfFile类方法加载的图片,只能获取ipa包路径下的图片资源。

原因:

在代码中设置一个断点,然后通过调试命令: po NSHomeDirectory()获得模拟器包沙盒路径上级目录中Bundle的app文件显示包内容得出: Assets.xcassets会被打包成Assets.car文件。所以imageWithContentsOfFile方法则无法获取该文件中的资源。而imageNamed方法不仅能获取Assets.xcassets中的文件,也能获取包路径下的资源文件。两者还有的一个区别在于,通过imageNamed加载的图片会有缓存,当强指针引用没有指向当前对象时其不会从内存中清理掉,而通过imageWithContentsOfFile加载的图片则不会有缓存,强指针一旦没有指向该对象则内存中的资源会被当即清理掉。

阅读更多
个人分类: objective-c
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭