iOS UIImageView 的使用

二. 创建UIImageView的两种方式

1.自己设置图片位置和尺寸

“`
UIImageView *iv = [[UIImageView alloc] init]; //创建的图片, 没有默认的宽高
iv.backgroundColor = [UIColor redColor];
UIImage *image = [UIImage imageNamed:@”meinv.jpg”];
iv.image = image;

//自己设置图片位置和尺寸
iv.frame =  CGRectMake(100, 100, image.size.width, image.size.height);
[self.view addSubview:iv];
“`

2、使用默认图片尺寸和位置

    //默认宽高,为图片宽高,位置为0,0
    UIImageView *iv = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"meinv.jpg"]]; 

    //推荐设置iv的frame,以便于设置图片的摆放位置
    //iv = CGRectMake(100, 100, image.size.width, image.size.height);

    iv.backgroundColor = [UIColor redColor];
    [self.view addSubview:iv];
    NSLog(@"%@",NSStringFromCGRect(iv.frame));

三. ContentMode属性

typedef NS_ENUM(NSInteger, UIViewContentMode) {
    UIViewContentModeScaleToFill,
    UIViewContentModeScaleAspectFit,      // contents scaled to fit with fixed aspect. remainder is transparent
    UIViewContentModeScaleAspectFill,     // contents scaled to fill with fixed aspect. some portion of content may be clipped.
    UIViewContentModeRedraw,              // redraw on bounds change (calls -setNeedsDisplay)
    UIViewContentModeCenter,              // contents remain same size. positioned adjusted.
    UIViewContentModeTop,
    UIViewContentModeBottom,
    UIViewContentModeLeft,
    UIViewContentModeRight,
    UIViewContentModeTopLeft,
    UIViewContentModeTopRight,
    UIViewContentModeBottomLeft,
    UIViewContentModeBottomRight,
};

规律:
     但凡取值中包含Scale单词的, 都会对图片进行拉伸(缩放)
     但凡取值中没有出现Scale单词的, 都不会对图片进行拉伸
     UIViewContentModeScaleToFill,
     > 会按照UIImageView的宽高比来拉伸图片
     > 直到让整个图片都填充UIImageView为止
     > 因为是按照UIImageView的宽高比来拉伸, 所以图片会变形

规律:
     但凡取值中包含Aspect单词的, 都会按照图片的宽高比来拉伸
     > 因为是按照图片的宽高比来拉伸, 所以图片不会变形
     UIViewContentModeScaleAspectFit,
     > 会按照图片的宽高比来拉伸
     > 要求整张图片都必须在UIImageView的范围内
     > 并且宽度和高度其中一个必须和UIImageView一样
     > 居中显示

     UIViewContentModeScaleAspectFill,
     > 会按照图片的宽高比来拉伸
     > 要求整张图片必须填充UIImageView
     > 并且图片的宽度或者高度其中一个必须和UIImageView一样

四. 剪裁超出部分属性

    观察下面运行效果,理解clipsToBounds属性
    // 1.创建一个UIImageView
    UIImageView *iv = [[UIImageView alloc] init];
    // 2.设置相关属性
    iv.backgroundColor = [UIColor redColor];
    iv.image = [UIImage imageNamed:@"meinv.jpg"];
    iv.contentMode = UIViewContentModeLeft;
    // 3.设置frame
    iv.frame = CGRectMake(100, 100, 200, 200);

    // 剪切超出的部分
    iv.clipsToBounds = YES;
    [self.view addSubview:iv];

五. UIImageView动画

- (IBAction)run:(UIButton *)sender
{
    NSMutableArray *arrM = [NSMutableArray array];
    // 1.创建多张图片
    for (int i = 1; i <= 6; i++) {
        NSString *imageNmae = [NSString stringWithFormat:@"run_%i", i];
        UIImage *image = [UIImage imageNamed:imageNmae];
        // 2.将所有的图片放到数组中
        [arrM addObject:image];
    }
    // 3.将保存了所有图片的数组赋值给UIImageView
    self.containerView.animationImages = arrM;

    // 设置重复次数,0,代表无线
    self.containerView.animationRepeatCount = 1; 

    //设置一次动画所需时间
    self.containerView.animationDuration = 1;

    // 开始动画
    [self.containerView startAnimating];
}

- (IBAction)stop:(id)sender {

     //判断是否正在动画
    if([self.containerView isAnimating])
    {
        //停止动画
        [self.containerView stopAnimating];
    }

六. UIImageView性能优化问题

问题描述: 如果直接用 UIImage *image = [UIImage imageNamed:imageNmae];加载图片,图片会自动到内存中缓存起来. 这时,当加载多张图片后,假如执行动画,就会导致,内存暴增,而且当动画执行完毕之后,也不会释放。

解决方案:
//使用initWithContentOfFile:方法直接从mainBundle,app根目录中加载图片,
//这样如果遇到上述问题,在执行完动画之后,图片会自动释放..

NSString *imageNmae = [NSString stringWithFormat:@"%@_%i", prefix, i];
imageNmae = [[NSBundle mainBundle] pathForResource:imageNmae ofType:@"png"];
UIImage *image = [[UIImage alloc] initWithContentOfFile:imageName];

代替UIImage *image = [UIImage imageNamed:imageNmae];

七. 图片拉伸

为什么要让图片拉伸?

如果我们要设置背景图片,如按钮,当我们直接实用图片时(有时美工也会给我们一张可拉伸小图片),可能图片会被系统拉伸变形,变得很丑,严重影响美观!

图片拉伸就是为了解决如上问题而存在的,让图片在拉伸时,保证图片不变形
图片拉伸历史过程:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIButton *btn = [[UIButton alloc]init];
    btn.frame = CGRectMake(100, 100, 200, 100);
    //旧图片
    UIImage *image = [UIImage imageNamed:@"common_button_blue_highlighted"];

    //可以指定平铺还是拉伸,得到一张新图片
    //指定受保护的区域
<div style="font-family: Arial; font-size: 14px;">UIImageResizingMode参数,用来指定拉伸的模式:</div><blockquote style="font-family: Arial; font-size: 14px;"><div>UIImageResizingModeStret<wbr>ch:拉伸模式,通过拉伸UIEdgeInsets指定的矩形区域来填充图片</wbr></div><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;">UIImageResizingModeTile:平铺模式,通过重复显示UIEdgeInsets指定的矩形区域来填充图片</p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;">
</p></blockquote><div style="font-family: Arial; font-size: 14px;">UIEdgeInsets参数用来指定被拉伸的区域</div>
    UIEdgeInsets insets = UIEdgeInsetsMake(5, 5, 5, 5);
    UIImage *newImage =  [image resizableImageWithCapInsets:insets resizingMode:UIImageResizingModeStretch];

    //按钮设置背景
    [btn setBackgroundImage:newImage forState:UIControlStateNormal];

    [self.view addSubview:btn];

}

时间: 2024-10-11 02:45:21

iOS UIImageView 的使用的相关文章

iOS - UIImageView - how to handle UIImage image orientation

本文转载至 http://stackoverflow.com/questions/8915630/ios-uiimageview-how-to-handle-uiimage-image-orientation up vote18down votefavorite 12 Is it possible to setup UIImageView to handle image orientation? When I set the UIImageView to image with orientati

[iOS]UIImageView增加圆角

[iOS]UIImageView增加圆角 "如何给一个UIImageView增加圆角?有几种方法?各自区别?" 备注:本文参考自http://www.jianshu.com/p/d1954c9a4426 UIImageView *poImgView = [[UIImageView alloc]init]; 方案A(基本方案): poImgView.layer.cornerRadius = poImgView.frame.size.width/2.0; poImgView.layer.m

iOS:UIImageView添加点击事件

UIImageView并不像UIButton那样点击鼠标就可以关联点击事件,也不像Android里有onClickListener,这个时候就需要借助UITapGestureRecognizer类,从类名上就可以看出,这个类就是用于处理tap(单击)事件的. 创建两个UIImageView对象,imageView1和imageView2 [imageView1 setUserInteractionEnabled:YES]; [imageView2 setUserInteractionEnable

iOS UIImageView设置为圆形

UIImageView设置为圆形的方法: _Image.layer.masksToBounds = YES; _Image.layer.cornerRadius = self.Image.frame.size.width / 2; 设置加载本地图片的方法: _Image.image = [UIImage imageNamed:@"Image"];//图片“Image”为xcassets里的set名称

iOS:UIImageView图像视图控件

UIImageView:图像视图控件: 它是UIView的子类,因此也是视图控件,可以用来显示图像.因为它具有帧动画属性和操作方法,因此可以用来制作动画,其实动画就是很短的时间内,执行显示连续的很多张图片,人肉眼无法处分,使人看起来仿佛图像在动似的.例如典型的实例:汤姆猫实例 @interface UIImageView : UIView { @property(nonatomic,retain) UIImage *image;    //图像 @property(nonatomic,retai

ios UIImageView异步加载网络图片

方法1:在UI线程中同步加载网络图片 UIImageView *headview = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; NSURL *photourl = [NSURL URLWithString:@"http://www.exampleforphoto.com/pabb/test32.png"]; //url请求实在UI主线程中进行的 UIImage *images = [UIImage ima

ios UIImageView处理图片大小问题

UIImageView视图可以显示图片 实例化UIImageView有两种方法 第一种方法: UIImageView *myImageView = [[ UIImageView alloc] initWithImage: [UIImage imageNamed: @"demo"]]; 用该方法可以显示图片原有大小. 第二种方法: UIImageView *myImageView = [[UIImage alloc] initWithFrame: self.view.bounds] 该方

从零开始学习ios(UIImageView)控件及其属性

//创建图片视图时就设定Frame的属性和大小 UIImageView *img = [[UIImageView alloc] initWithFrame:CGRectMake(60, 20, 80, 100)]; [img setImage:[UIImage imageNamed:@"mtxx6"]]; /* 创建图片视图的另外四种方法 type img{ UIImageView *img1 = [[UIImageView alloc]init]; UIImageView *img2

IOS UIImageView直接响应点击事件的解决方法

UIImageView的手势处理可以响应点击事件. 1.  self.allScreenImg.userInteractionEnabled = YES;//UIImageView默认不响应手势,需要开启userInteractionEnabled //处理单击事件 UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(clickAllScr