如何得到uiimage 图片大小的大小

您所在的位置: &
iOS开发中关于UIImage的知识点总结
iOS开发中关于UIImage的知识点总结
UIImage是iOS中层级比较高的一个用来加载和绘制图像的一个类,更底层的类还有 CGImage,以及iOS5.0以后新增加的CIImage。今天我们主要聊一聊UIImage的三个属性: imageOrientation, size, scale,几个初始化的方法: imageNamed,imageWithContentsOfFile,以及绘制Image的几个draw开头的方法。
UIImage是iOS中层级比较高的一个用来加载和绘制图像的一个类,更底层的类还有 CGImage,以及iOS5.0以后新增加的CIImage。今天我们主要聊一聊UIImage的三个属性: imageOrientation,
size, scale,几个初始化的方法:
imageNamed,imageWithContentsOfFile,以及绘制Image的几个draw开头的方法。
一、UIImage的size,scale属性
先想一个问题&一个图像的尺寸到底是多大呢?&
第一反应可能就是image.size,恭喜你答错了,正确的答案是图像的实际的尺寸(像 素)等于image.size乘以image.scale。如果做过界面贴图的话你可能经常会需要准备至少两套图,一套1倍图,一套图已@2x命名的二倍 图。这样当我们的程序运行在retina屏幕的时候系统就会自动的去加载@2x的图片,它的size将和一倍图加载进来的size相等,但是scale却 置为2,这点大家可以做个简单的小测试验证一下。然我们再深入一点儿为什么不直接加载到成二倍的尺寸呢,原因很简单因为我们在界面布局中逻辑坐标系中的 (单位是point),而实际的绘制都是在设备坐标系(单位是pixel)进行的,系统会自动帮我们完成从point到pixel之间的转化。其实这个比 例也就刚好和UIScreen中的scale对应,这样整条scale的线就可以串通了。
二、UIImage的几种初始化方法的对比
1、imageNamed:方法
imageNamed:是UIImage的一个类方法,它做的事情比我们看到的要稍微多一些。它的加载流程如下:
a. 系统回去检查系统缓存中是否存在该名字的图像,如果存在则直接返回。
b. 如果系统缓存中不存在该名字的图像,则会先加载到缓存中,在返回该对象。
观察上面的操作我们发现系统会缓存我们使用imageNamed:方法加载的图像时候,系统会自动帮我们缓存。这种机制适合于那种频繁用到界面贴图累的加载,但如果我们需要短时间内频繁的加载一些一次性的图像的话,最好不要使用这种方法。
2、imageWithContentsOfFile:和initWithContentsOfFile:方法
这两个方法跟前一个方法一样都是完成从文件加载图像的功能。但是不会经过系统缓存,直接从文件系统中加载并返回。
顺便提一下,当收到内存警告的时候,系统可能会将UIImage内部的存储图像的内存释放,下一次需要绘制的时候会重新去加载。
3、imageWithCGImage:scale:orientation:方法
该方面使用一个CGImageRef创建UIImage,在创建时还可以指定方法倍数以及旋转方向。当scale设置为1的时候,新创建的图像将和原图像尺寸一摸一样,而orientaion则可以指定新的图像的绘制方向。
三、UIImage的imageOrientation属性
UIImage有一个imageOrientation的属性,主要作用是控制image的绘制方向,共有以下8中方向:
typedef&NS_ENUM(NSInteger,&UIImageOrientation)&{&&&&&UIImageOrientationUp,&&&&&&&&&&&&&&&&&UIImageOrientationDown,&&&&&&&&&&&&&&&UIImageOrientationLeft,&&&&&&&&&&&&&&&UIImageOrientationRight,&&&&&&&&&&&&&&UIImageOrientationUpMirrored,&&&&&&&&&UIImageOrientationDownMirrored,&&&&&&&UIImageOrientationLeftMirrored,&&&&&&&UIImageOrientationRightMirrored,&&};&
默认的方向是UIImageOrientationUp,这8种方向对应的绘制方如上面所示。我 们在日常使用中经常会碰到把iPhone相册中的照片导入到windows中,发现方向不对的问题就是与这个属性有关,因为导出照片的时候,写exif中 的方向信息时候没有考虑该方向的原因。既然这个属性可以控制image的绘制方向,那我们能不能通过改过这个属性来完成UIImage的旋转和翻转呢?带 着这个问题我们继续往下看。
四、UIImage的几个draw方法
UIImage的几个draw方法是用来绘制图像的利器,为什么这样说呢?因为它们在绘制图 像的时候会考虑当前图像的方向,即根据的imageOrientation绘制出不同的方向。由于图像是绘制在当前context中的,它同时还会考虑到 当前context的transform的变化。利于这两点我们就可以玩转图像的旋转和翻转了。
搜索了一些,目前网上大部分图像旋转都是通过创建CGBitmapContext,然后根据图像方向设置context的transform来实现的,这种方法要求对整个矩阵变化的过程都非常清楚,一个参数设置不多,出来的结果就会有问题。
下面我介绍一种实现起来简单方便的图像旋转方法,这种方法主要就是利用imageWithCGImage:scale:orientation:方法,指定不同的orientation来完成所需要的功能,先举个简单的例子:
假设一副图片显示为&498)this.width=498;' onmousewheel = 'javascript:return big(this)' title="iOS开发中关于UIImage的知识点 - 第1张
| IT江湖" alt="iOS开发中关于UIImage的知识点 - 第1张
| IT江湖" src="/wyfs02/M01/2D/54/wKioL1OWonCTZiSTAAADa4PVH4U760.jpg" />,我们要向左旋转90&,那么转过之后应该就会显示为498)this.width=498;' onmousewheel = 'javascript:return big(this)' title="iOS开发中关于UIImage的知识点 - 第2张
| IT江湖" alt="iOS开发中关于UIImage的知识点 - 第2张
| IT江湖" src="/wyfs02/M00/2D/54/wKiom1OWop2j_4HDAAADajVFjcs293.jpg" />,即将原图从orientationUP转到orientationLeft即可。以此类推为不同的方向旋转,只需要注意看R的显示即可,这样整个旋转和翻转的实现过程中完全可以不用考虑Transform那些东西,是不是很简单。
下面是图像旋转和翻转的完整代码:
&&&&&&&&&&#import&&UIKit/UIKit.h&&&&@interface&UIImage&(Rotate_Flip)&&&&&&-&(UIImage*)rotate90C&&&&&&-&(UIImage*)rotate90CounterC&&&&&&-&(UIImage*)rotate180;&&&&&&-&(UIImage*)rotateImageToOrientationUp;&&&&&&-&(UIImage*)flipH&&&&&&-&(UIImage*)flipV&&&&&&-&(UIImage*)flipA&&&&&@end&&&UIImage+Rotate_Flip.h&
&&&&&&&&&#import&&UIImage+Rotate_Flip.h&&&&@implementation&UIImage&(Rotate_Flip)&&&&&&-&(UIImage*)rotate90CounterClockwise&{&&&&&UIImage&*image&=&&&&&&switch&(self.imageOrientation)&{&&&&&&&&&case&UIImageOrientationUp:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationLeft];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationDown:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationRight];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationLeft:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationDown];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationRight:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationUp];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationUpMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationRightMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationDownMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationLeftMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationLeftMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationUpMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationRightMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationDownMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&default:&&&&&&&&&&&&&break;&&&&&}&&&&&&&&&&return&&}&&&&&&-&(UIImage*)rotate90Clockwise&{&&&&&UIImage&*image&=&&&&&&switch&(self.imageOrientation)&{&&&&&&&&&case&UIImageOrientationUp:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationRight];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationDown:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationLeft];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationLeft:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationUp];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationRight:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationDown];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationUpMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationLeftMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationDownMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationRightMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationLeftMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationDownMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationRightMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationUpMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&default:&&&&&&&&&&&&&break;&&&&&}&&&&&&&&&&return&&}&&&&&&-&(UIImage*)rotate180&{&&&&&UIImage&*image&=&&&&&&switch&(self.imageOrientation)&{&&&&&&&&&case&UIImageOrientationUp:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationDown];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationDown:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationUp];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationLeft:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationRight];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationRight:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationLeft];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationUpMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationDownMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationDownMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationUpMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationLeftMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationRightMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationRightMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationLeftMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&default:&&&&&&&&&&&&&break;&&&&&}&&&&&&&&&&return&&}&&&&&&-&(UIImage*)rotateImageToOrientationUp&{&&&&&CGSize&size&=&CGSizeMake(self.size.width&*&self.scale,&self.size.height&*&self.scale);&&&&&UIGraphicsBeginImageContext(size);&&&&&CGContextRef&context&=&UIGraphicsGetCurrentContext();&&&&&CGContextClearRect(context,&CGRectMake(0,&0,&size.width,&size.height));&&&&&&&&&&[self&drawInRect:CGRectMake(0,&0,&size.width,&size.height)];&&&&&&&&&&UIImage&*image&=&UIGraphicsGetImageFromCurrentImageContext();&&&&&UIGraphicsEndImageContext();&&&&&&&&&&return&&}&&&&&&-&(UIImage*)flipHorizontal&{&&&&&UIImage&*image&=&&&&&&switch&(self.imageOrientation)&{&&&&&&&&&case&UIImageOrientationUp:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationUpMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationDown:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationDownMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationLeft:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationRightMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationRight:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationLeftMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationUpMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationUp];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationDownMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationDown];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationLeftMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationRight];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationRightMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationLeft];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&default:&&&&&&&&&&&&&break;&&&&&}&&&&&&&&&&return&&}&&&&&&-&(UIImage*)flipVertical&{&&&&&UIImage&*image&=&&&&&&switch&(self.imageOrientation)&{&&&&&&&&&case&UIImageOrientationUp:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationDownMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationDown:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationUpMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationLeft:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationLeftMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationRight:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationRightMirrored];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationUpMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationDown];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationDownMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationUp];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationLeftMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationLeft];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&case&UIImageOrientationRightMirrored:&&&&&&&&&{&&&&&&&&&&&&&image&=&[UIImage&imageWithCGImage:self.CGImage&scale:1&orientation:UIImageOrientationRight];&&&&&&&&&&&&&break;&&&&&&&&&}&&&&&&&&&default:&&&&&&&&&&&&&break;&&&&&}&&&&&&&&&&return&&}&&&&&&-&(UIImage*)flipAll&{&&&&&return&[self&rotate180];&}&&&@end&&&UIImage+Rotate_Flip.m&
以上只是实现了图像的顺时针90&,逆时针90&,180&旋转,以及水平翻转,数值翻转等。至 于任意角度旋转怎么实现?其实也很简单,留着给大家思考吧。虽然我们可以通过orientation这种方法简单的完成图像旋转,但是如果有时间的话还是 建议大家尽量的看一下那种通过transform来完成旋转的代码,你会彻底搞清楚旋转矩阵是怎么回事儿。当然程序中使用的时候推荐使用我上面提供的这种 方法,因为不涉及真实的旋转操作,速度会快很多。
通过上面的小例子,我们可以看出越高级别的API帮助我们做的事情就越多,越底层的API提 供了更多的灵活性,但同时也带来了很多需要我们处理的东西。再编程的过程中尽量的使用高级别的API,同时最好能搞懂底层的实现机制。这样我们的程序才会 更高效,出了问题才知道去哪里查找。
来自/smileEvday/archive//UIImage.html【编辑推荐】【责任编辑: TEL:(010)】
关于&&&&的更多文章
苹果在2014WWDC上发布的新编程语言Swift相信牵动着大部分iOS开发
讲师: 1人学习过讲师: 15人学习过讲师: 4人学习过
在本系列文章当中,我们将从零开始学习Android开发。
寒冷的北京城依旧雾蒙蒙。北方的十二月本该是安逸静谧
智能电视正在加速来到我们的生活,在一些人对这个名词
本书全面深入地介绍网络安全的配置与实现技术,包括系统管理、用户账户、病毒防御、灾难恢复、文件备份、安全策略、注册表等服务
Windows Phone专家
Android开发专家
51CTO旗下网站网络获取图片大小自适应
网络获取图片大小自适应
最近在做一件事,就是将图片和文字显示到一起,是对纯文本和图片的处理。图片是要从网络上进行获取的,所以View要随着图片的获取来改变自己的大小。&这里面也小小的使用了一下block。&首先介绍一下三个基本类。&最底层的是获取图片的类。&#import &UIKit/UIKit.h&&typedef void (^DBNetworkImageViewGetImage) (UIImage *image);&@interface DBNetworkImageView : UIImageView{& & DBNetworkImageViewGetImage &_}/**&初始化方法&@param block 主要用于获取图片&&*/- (id)initWithFrame:(CGRect)frame block:(DBNetworkImageViewGetImage)&@end&#import "DBNetworkImageView.h"&@implementation DBNetworkImageView&- (id)initWithFrame:(CGRect)frame block:(DBNetworkImageViewGetImage){& & self = [super initWithFrame:frame];& & if(self != nil)& & {& & & & _block = Block_copy(block);& & }& &}&- (void)dealloc{& & Block_release(_block);& & [super dealloc];}&- (void)setImage:(UIImage *)image{& & _block(image);}&@end&这只是最基本的继承自UIImageView的子类,但是setImage:方法被重写了。补充一下,我这里有UIImageView方法的补充类,可以直接设置图片的URL来异步获取图片,这块会在以后的文章中进行说明。&下面是最简单的显示一段文字和一张图片的类。&#import &UIKit/UIKit.h&#import "DBNetworkImageView.h"&typedef void (^DBViewSetNeedsDisplay) ();&@interface DBView : UIView{& & NSString & &*_textS& & NSString & &*_imageURL;& & UIImage & & *_& && & DBViewSetNeedsDisplay & _& & DBNetworkImageView &*_networkImageV& && & CGRect & & &_originF& & CGSize & & &_& & CGSize & & &_textS& & CGSize & & &_imageS}/**&显示的文本信息&*/@property (copy, nonatomic) NSString *textS/**&显示的图片路径,用于从网络上获取图片&*/@property (copy, nonatomic) NSString *imageURL;/**&显示的图片信息&*/@property (retain, nonatomic) UIImage */**&View的Size&*/@property (assign, nonatomic) CGS/**&初始化方法&@parma block 主要控制super view的动作&*/- (id)initWithFrame:(CGRect)frame block:(DBViewSetNeedsDisplay)&@end&#import "DBView.h"#import "UIImageView LXNetworkKit.h"&@implementation DBView&@synthesize textString = _textS@synthesize imageURL =_imageURL;@synthesize image = _@synthesize size = _&- (id)initWithFrame:(CGRect)frame block:(DBViewSetNeedsDisplay)block{& & self = [super initWithFrame:frame];& & if (self) {& & & & // Initialization code& & & & self.backgroundColor = [UIColorclearColor];& & & && & & & _originFrame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);& & & & _block = Block_copy(block);& & & && & & & _size = CGSizeZ& & & & _textSize = CGSizeZ& & & & _imageSize = CGSizeZ & & & && & }& &}&- (void)dealloc{& & [_textStringrelease];& & [_imageURLrelease];& & [_image release];& & Block_release(_block);& & [super dealloc];}&// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect{& & // Drawing code& & [_textStringdrawInRect:CGRectMake(0, 0, _textSize.width, _textSize.height) withFont:[UIFontsystemFontOfSize:12.0f]];& && & if(_image != nil)& & {& & & & [_imagedrawInRect:CGRectMake(0, _textSize.height, _imageSize.width, _imageSize.height)];& & }& && & _block();}&- (void)setTextString:(NSString *)string{& & if(_textString != nil)& & {& & & & [_textString release];& & }& && & _textString = [string copy];& && & CGSize size = [string sizeWithFont:[UIFontsystemFontOfSize:12.0f]];& && & _textSize = [string sizeWithFont:[UIFontsystemFontOfSize:12.0f] constrainedToSize:CGSizeMake(_originFrame.size.width, (size.width / _originFrame.size.width
1) * 20) lineBreakMode:UILineBreakModeWordWrap];& && & _size = CGSizeMake(_originFrame.size.width, _textSize.height
_imageSize.height);& && & if(_size.height & _originFrame.size.height)& & {& & & & _originFrame = CGRectMake(_originFrame.origin.x, _originFrame.origin.y, _originFrame.size.width, _size.height
12.0);& & & && & & & self.frame = _originF& & }& && & [selfsetNeedsDisplay];}&- (void)setImageURL:(NSString *)imageURL{& & if(_imageURL != nil)& & {& & & & [_imageURL release];& & }& && & _imageURL = [imageURL copy];& && & if(_networkImageView == nil)& & {& & & & _networkImageView = [[[DBNetworkImageViewalloc] initWithFrame:CGRectZero& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & block:^(UIImage *image) {& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & [self setImage:image];& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & }] autorelease];& & }& && & [_networkImageViewsetImageWithURL:[NSURLURLWithString:imageURL]];}&- (void)setImage:(UIImage *)image{& & if(_image != nil)& & {& & & & [_image release];& & }& && & _image = [image retain];& && & if(_image != nil)& & {& & & & _imageSize = CGSizeMake(_originFrame.size.width, _image.size.height / _image.size.width * _originFrame.size.width);& & }& && & _size = CGSizeMake(_originFrame.size.width, _textSize.height
_imageSize.height);& && & if(_size.height & _originFrame.size.height)& & {& & & & _originFrame = CGRectMake(_originFrame.origin.x, _originFrame.origin.y, _originFrame.size.width, _size.height
12.0);& & & && & & & self.frame = _originF& & }& && & [selfsetNeedsDisplay];}&@end&其实整体机制很简单,就是在View直接描绘文字和图片,只要调用setImageURL:和setTextString:方法就会重新计算需要显示的大小,并对View的大小进行调整。&最后,由于View的大小可能会超出整个屏幕,所以用ScrollView来装载这些会自己调整大小的View。&#import &UIKit/UIKit.h&&@interface DBScrollView : UIScrollView&- (void)refreshAllS&@end&#import "DBScrollView.h"#import "DBView.h"&@implementation DBScrollView&- (void)refreshAllSubviews{& & NSArray *subviews = self.& & CGFloat height = 0.0;& & for(DBView *view in subviews)& & {& & & & view.frame = CGRectMake(0, height, view.frame.size.width, view.frame.size.height);& & & & height
= view.size.& & }& & self.contentSize = CGSizeMake(self.frame.size.width, height);}&@end&少加了一段代码,就是再向ScrollView添加DBView的对象直接设置block函数为下面这种形式:&_textScrollView = [[[DBScrollViewalloc] initWithFrame:CGRectMake(10, 75, 300, 336)] autorelease];& & & & & & & & [self.view addSubview:_textScrollView];& & & & & & & && & & & & & & & _dbView = [[[DBView alloc] initWithFrame:CGRectMake(0, 0, 300, 336) block:^{& & & & & & & & & & [_textScrollViewrefreshAllSubviews];& & & & & & & & }] autorelease];& & & & & & & & [_textScrollViewaddSubview:_dbView];& & & & & & & && & & & & & & & [_dbViewsetTextString:文本];&
发表评论:
TA的最新馆藏

我要回帖

更多关于 uiimage 大小 的文章

 

随机推荐