• iOS:UIImageView图像视图控件


    UIImageView:图像视图控件:

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

     @interface UIImageView : UIView {

    @property(nonatomic,retain) UIImage *image;    //图像                                               

    @property(nonatomic,retain) UIImage *highlightedImage ;    //高亮图像  

    @property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled; //视图能否交互  

    @property(nonatomic,getter=isHighlighted) BOOL highlighted; //是否高亮

    @property(nonatomic,copy) NSArray *animationImages;   //帧动画图像数组(全部的图像)        

    @property(nonatomic,copy) NSArray *highlightedAnimationImages ;  //高亮的帧动画图像数组 (全部的图像) 

    @property(nonatomic) NSTimeInterval animationDuration;  //执行一次全程的帧动画时间    

    @property(nonatomic) NSInteger  animationRepeatCount; //帧动画重复次数

    @property (nonatomic, retain) UIColor *tintColor;//控件颜色

    }

    - (instancetype)initWithImage:(UIImage *)image; //初始化

    - (instancetype)initWithImage:(UIImage *)image highlightedImage:(UIImage *)highlightedImage;//初始化

    - (void)startAnimating;//开始帧动画

    - (void)stopAnimating;//停止帧动画

    - (BOOL)isAnimating;//是否正在执行帧动画

    @end

      实例如下:汤姆猫

       只要图像素材充足,其实代码很简单,素材截图和代码如下:

    #import "ViewController.h"

    @interface ViewController ()

    @property (weak, nonatomic) IBOutlet UIImageView *imgviewCat;

    //每一个按钮都对应着自己的一个事件

    - (IBAction)drinkBtnClicked;

    - (IBAction)clawBtnClicked;

    - (IBAction)birdBtnClicked;

    - (IBAction)breadBtnClicked;

    - (IBAction)CymbalBtnClicked;

    - (IBAction)stomachBtnClicked;

    - (IBAction)fartBtnClicked;

    - (IBAction)knockoutBtnClicked;

    - (IBAction)angryBtnClicked; 

    @end

     

    @implementation ViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view, typically from a nib.

    }

    //喝牛奶

    - (IBAction)drinkBtnClicked

    {

        [self action:@"drink" andNums:81];

    }

    //划玻璃

    - (IBAction)clawBtnClicked

    {

        [self action:@"scratch" andNums:56];

    }

    //吃小鸟

    - (IBAction)birdBtnClicked

    {

        [self action:@"eat" andNums:40];

    }

    //附蛋糕

    - (IBAction)breadBtnClicked

    {

        [self action:@"pie" andNums:24];

    }

    //敲镲

    - (IBAction)CymbalBtnClicked

    {

        [self action:@"cymbal" andNums:13];

    }

    //肚子痛

    - (IBAction)stomachBtnClicked

    {

        [self action:@"stomach" andNums:34];

    }

    //放屁

    - (IBAction)fartBtnClicked

    {

        [self action:@"fart" andNums:28];

    }

    //敲头头晕

    - (IBAction)knockoutBtnClicked

    {

        [self action:@"knockout" andNums:81];

    }

    //打脸生气

    - (IBAction)angryBtnClicked

    {

        [self action:@"angry" andNums:26];

    }

    //所有的动作事件

    -(void)action:(NSString *)actionName andNums:(NSInteger) num

    {

       //如果正在执行当前的动画,对新触发的事件不做处理,直到当前的动作执行结束为止

        if(self.imgviewCat.isAnimating)

        {

            return;

        }

        //1、加载图片资源到数组中

        NSMutableArray *arrayM = [NSMutableArray array];

        for(int i=0; i<num; i++)

        {

            NSString *catName = [NSString stringWithFormat:@"%@_%02d.jpg",actionName,i];

            //通过imagNamed:这种方式加载图片,加载好的图片会一直保存在内存中,不会释放,这样下次在使用的时候就不需要再加载了,提高了运行速度;但       

             是,缺点是由于缓存的缘故,如果资源过大,那么应用程序会一直占用太多的内存,这就是缓存。   

         //即使没有强类型指针引用,对象在方法结束后也不会被销毁,这就是缓存造成的。

            //UIImage *imgcat = [UIImage imageNamed:catName];

            //解决办法,换一种加载方式,只要没有强类型指针引用,加载的图片对象在方法执行完后就会被销毁

            NSString *path = [[NSBundle mainBundle] pathForResource:catName ofType:nil];

           //不能再传入图片名称,而是要传入放在根目录下的完整的图片路径,即绝对路径

            UIImage *imgcat = [UIImage imageWithContentsOfFile:path];

            [arrayM addObject:imgcat];

        }

        

        //2、设置UIImageView(图片框)的animationImages属性,这个属性包含的就是所有的帧动画

        self.imgviewCat.animationImages = arrayM;

        

        //3、设置动画持续时间

        self.imgviewCat.animationDuration = self.imgviewCat.animationImages.count * 0.08;

        

        //4、设置动画重复次数

        self.imgviewCat.animationRepeatCount = 1;

        

        //5、开始动画

        [self.imgviewCat startAnimating];

     

         //6.在动画执行完后,再清空图片集合,设置图片框在调用performSelector方法时,让其延迟执行

      [self.imgviewCat performSelector:@selector(setAnimationImages:) withObject:nil

      afterDelay:self.imgviewCat.animationImages.count*0.1];

    }

    @end

  • 相关阅读:
    SharePoint Portal Server与SharePoint Services之间的关系
    配置Microsoft Visual SourceSafe 2005的局域网/Internet访
    Maven创建Web项目(idea)
    Maven入门(idea)
    Windows下搭建Vue脚手架CLI
    关于wince中的全屏显示
    ubuntu右键添加打开终端的快捷菜单[转]
    将CString转换成string ...
    090606日记
    Java中的InputStream和OutputStream
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4782306.html
Copyright © 2020-2023  润新知