zoukankan      html  css  js  c++  java
  • UIImageView的基本使用

      UIImageView,是一个图片的展示框,默认是没有用户交互功能的,如果需要有交互功能,需要自己手动打开 TA 的交互功能。

      好了,话不多说,我们就来看看怎么创建与使用的。

    // 初始化
    UIImageView *imageView = [[UIImageView alloc] init];
    // 设置frame
    imageView.frame = CGRectMake(101, 200, 173, 173)];
    // 设置一张图片
    UIImage *image = [UIImage imageNamed:@"image_photo"];
    // 把图片添加到imageView上
    imageView.image = image;

      上面的代码是一个创建并添加一张图片的一个最简单的流程,接下来,就是设置圆角与边框的颜色,让iamgeView看起来更加的美观。

    // 设置圆角
    imageView.layer.masksToBounds = YES;
    imageView.layer.cornerRadius = 10;
    
    // 设置边框的颜色和大小
    imageView.layer.borderColor = [UIColor blueColor].CGColor;
    imageView.layer.borderWidth = 2;

      我们还能设置透明度,设置高亮状态显示的图片。

     // 隐藏或者显示图片
    imageView.hidden = YES; 
    // 设置透明度
    imageView.alpha =0.5;  
    // 设置高亮时显示的图片,图片需要自己创建
    imageView.highlightedImage = (UIImage *)hightlightedImage;
    // 设置正常状态下显示的图片
    imageView.image = (UIImage *)image; 

      开头说了,可以为图片添加单机事件,但是一定要手动开启交互功能

    // 为iamgeView开启交互功能
    imageView.userInteractionEnabled = YES;
    // 设置点击事件
    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(click)];
    // 为imageView添加点击事件
    [imageView addGestureRecognizer:tapGestureRecognizer];
    
    // 点击事件方法实现,可以选择是否带参数
    - (void)click { 
      NSLog(@"我被点击了!");
    }

      UIImageView还有一个属性(contentMode),是当图片大小小于UIImageVIew时处理图片的。

    // contentMode是用来设置图片的显示方式,TA很多的常量
    /*
            UIViewContentModeScaleToFill,
            UIViewContentModeScaleAspectFit,      
            UIViewContentModeScaleAspectFill,    
            UIViewContentModeRedraw,          
            UIViewContentModeCenter,          
            UIViewContentModeTop,
            UIViewContentModeBottom,
            UIViewContentModeLeft,
            UIViewContentModeRight,
            UIViewContentModeTopLeft,
            UIViewContentModeTopRight,
            UIViewContentModeBottomLeft,
            UIViewContentModeBottomRight,
    */
    // 这里我们就选择第一个设置
    imageView.contentMode = UIViewContentModeScaleAspectFit;

      最后,我们就要让UIImageView从一个相册变成一个“动态图”。

        NSMutableArray *mArr = [NSMutableArray arrayWithCapacity:0];
        for (int i = 1; i < 30; i++) {
            // 获取图片名称,如果png结尾的可以不加上后缀,不然一定要加上后缀,不加后缀系统读取不到图片的
            NSString *picStr = [NSString stringWithFormat:@"test%d", i];
            // 获取每一张图片对象
            UIImage *img = [UIImage imageNamed:picStr];
            [mArr addObject:img];
        }
        
        // 指定做动画的所有图片
        imageView.animationImages = mArr;
     
        // 指定动画时间,动画重复次数
        imageView.animationDuration = 0.3;
        imageView.animationRepeatCount = 0;
        
        // 开启动画
        [imageView startAnimating];

      这是初学者最开始的写法,系统会把图像Cache到内存。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存,而且释放图像的内存是一件相对来说比较麻烦的事情。所以我们需要换一个方法,这样内存就不会占这么多了。

    NSMutableArray *arrayM = [NSMutableArray array];
        for (int i = 0; i < count; i++) {
            NSString *imgName = [NSString stringWithFormat:@"%@_%02d.jpg", imgNames, i];
            // 通过imageNamed: 这种方式加载图片,加载好的图片会一直保存写在内存中,不会释放,这样下次如果再使用同样的图片的时候就不需要再重新加载了,因为内存里面已经有了。缺点就是: 如果加载了大量的图片,那么这些图片会一直保留在内存中,导致应用程序占用内存过大(这就叫缓存)
            // 使用这种方式加载图片,加载图片即便没有强类型指针引用也不会别销毁(会被缓存)
    //        UIImage *img = [UIImage imageNamed:imgName];
    //         解决: 换一种加载图片的方式,不要使用缓存
            NSString *path = [[NSBundle mainBundle] pathForResource:imgName ofType:nil];
           // 使用下面这种方式加载的图片,只要没有强类型指针引用就会被销毁了
            // 这里的参数不能再传递图片了,这里需要传递一个图片的完整路径
            UIImage *img = [UIImage imageWithContentsOfFile: path];
            [arrayM addObject:img];
        }
        self.imgViewCat.animationImages = arrayM;
        self.imgViewCat.animationDuration = self.imgViewCat.animationImages.count * 0.1;
        self.imgViewCat.animationRepeatCount = 1;
        [self.imgViewCat startAnimating];

      保存路径而不是保存图片这样就能减少内存了。是不是对新手来说又学到啦。

  • 相关阅读:
    megento 安装过程问题 畅想由我
    jquery更改html标签 span 文字获取 a,span,div,class对象内容 畅想由我
    Your web server is configured incorrectly. As a result, configuration files with sensitive information are accessible from the outside. Please contact 畅想由我
    Object 与 Type
    js中apply和join
    URLRewriter实现机制
    在项目中让Ajax面向对象 (一)
    浅谈javascript中Json方式与闭包式
    在项目中让Ajax面向对象 (二)
    使用JWT创建安全的ASP.NET Core Web API
  • 原文地址:https://www.cnblogs.com/shensq/p/5205852.html
Copyright © 2011-2022 走看看