[UI界面]-UIImage的拉伸

    UIImage主要是用来设置UIImageView中的image属性的。如果图片尺寸和UIImageView的尺寸正好一样。那么,恭喜您,直接放上去就ok了。

    但是,如果两个尺寸不相匹配怎么办呢?答案很明显有两种:拉伸或者保持原来大小不变。

一、不拉伸图片

    如果你不想拉伸图片,那么伴随着一个问题。这个Image应该放在哪里合适?

    这时,UIImageView会用到从父类UIView继承过来的一个属性contentMode。

    如果这样写:

      imageView.contentMode = UIViewContentModeCenter;//假设imageView存在,并且已经设置过了一个尺寸较小的图片

    这句代码执行后,可以看到图片会显示在imageView的中央。其它的枚举值效果,大家可以自己去尝试。

二、拉伸图片

    如果拉伸图片,那么伴随的将是另外一个问题,该如果拉伸?

    1>均匀拉伸

      均匀拉伸分为两种:等比例拉伸或者非等比例拉伸

      如果选择等比例拉伸,那么可能必然只能以一边外参照,另一边就无法考虑到。

      这时,也会用到上面说的contentMode属性。

        imageView.contentMode = UIViewContentModeScaleAspectFit;//假设imageView存在,并且已经设置过了一个尺寸较小的图片

        imageView.contentMode = UIViewContentModeScaleAspectFill;//假设imageView存在,并且已经设置过了一个尺寸较小的图片

      上面代码第一种,执行的效果是,水平方向和垂直方向等比例拉伸。当某一边达到最大效果时,停止拉伸,并显示出来。

      下面代码,执行的效果是,水平方向和垂直方向等比例拉伸。当某一边达到最大效果时,如果另一边还没有达到最大效果,继续拉伸,并且已经达到最大效果的方向会继续拉伸,超过imageView的边界。

      如果是非等比拉伸,那么就不需要考虑那么多问题了。

        imageView.contentMode = UIViewContentModeScaleToFill;//假设imageView存在,并且已经设置过了一个尺寸较小的图片

      这句代码会直接将图片拉伸到填充这个imageView。

    2>非均匀拉伸

      在这里只考虑一种情况。就是保持图片的边界不变,只拉伸中间的一部分。

      如果是iOS5.0以前,可以有两个选择。不过第一种已经声明过时,不推荐使用。

        [image stretchableImageWithLeftCapWith:7 topCapHeight:8];//假设image已经存在,并且其大小为17*31

        [image resizableImageWithCapInsets:[UIEdgeInsetsMake(8, 7, 22, 9)]];//假设image已经存在,并且其大小为17*31

      上面代码第一种,意思是说,如果水平方向需要拉伸,那么保持左边7个像素不变,保持右边(17 - 7 - 1)个像素不变,拉伸的是从第7个像素开始的一个像素长度;如果是垂直方向需要拉伸,那么保持上边8个像素不变,保持下边(31-8-1)个像素不变,拉伸的是从第8个像素开始的一个像素长度。

      下面代码,所做的效果和上面的一样。

posted @ 2014-02-25 20:07  帝林  阅读(794)  评论(0编辑  收藏  举报