【iOS开发-9】图片属性介绍,实现类似于“点击关注”的动画效果,以及顺便实现一个开始/停止按钮切换功能

(1)如果是按钮触发一个事件方法,我们只需要用(id)sender把控件对象传递进来,这个方法就能处理控件属性值;而如果方法需要处理其他对象,那么一个方法,就是把这个对象设置为全局变量,这样所有的方法都可以使用这个对象,并设置它的属性,我们这里的imgView2就是这样,可以在方法中,控制它停止还是开始。

(2)UIImage和UIImageView通常是一对,UIImage的对象只是把图片添加到程序里面,但它不是视图无法被加载显示在APP中,但是UIImageView是一个视图,可以把UIImage的对象初始化给UIImageView的对象,然后让这个UIImageView的对象被加载到视图中以显示出来。从我们最后用了[self.view addSubview:imgView1]可见,我们要加载的虽然是一个子视图,但子视图是视图。

(3)图片的内容模式是比较重要的,即把图片怎么放在UIImageView的frame框里,是剧中、靠左还是等比例缩放填满,还是不等比例只要填满即可。

(4)实现动画效果,其实就是弄一系列图片然后给UIImageView对象的动画图片属性,如本例中所示一般是吧图片装在数组中,然后再传递;传递后设置播放时间和次数等等,最后用startAnimating和stopAnimating等方法来控制是否播放,当然,要记得把这视图加载进来才能显示。

(5)复习了一遍UIButton的方法,即如何实现像播放器的“点暂停就变成播放,点播放就变成暂停”的按钮的样式。

*发现在iOS7这些新版本中tintColor属性(设置点击时的按钮背景)失效了,所以为了点击时有点feeling,就用改变背景颜色的方法代替。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
{
    //为了在其他方法中调用这个对象,需要把它设置为全局变量,而不仅仅是在viewDidLoad中
    UIImageView *imgView2;
}

- (void)viewDidLoad {
    //UIImage实例化一个img1对象,并初始化一个图片给它,这步骤相当于把图片移动到应用程序里面
    UIImage *img1=[UIImage imageNamed:@"logo.png"];
    //然后UIImageView相当于一个载体,用来显示这个图片对象
    //图片自己不能在程序中显示,需要一个载体,如之前讲UIButton时,图片就是借助按钮这个载体显示的
    //所以UIImage的对象img1没有frame框架
    //只有UIImageView的对象imgView1才有frame属性,它装着图片,然后我们对它位置大小进行设置即可
    UIImageView *imgView1=[[UIImageView alloc]initWithImage:img1];
    //意料之中:图片被自动缩放了,缩放到frame的大小
    imgView1.frame=CGRectMake(30, 30, 300, 80);
    //那如果需要原图小小呢?
    //(1)如果知道原图宽高,直接把数字写进去
    //(2)调用图片size里地宽高属性,如imgView1.frame=CGRectMake(30, 30, img1.size.width, img1.size.height)

    //随之而来的时,如果我既想保持imgView1的宽高不变,又想图片不被缩放
    //需要用到内容模式属性
    //先弄个背景来做效果演示用
    imgView1.backgroundColor=[UIColor redColor];
    //尝试其中一个,发现居中了,而且图片没有被缩放了
    //这个contentMode内容模式是UIView的方法,不仅仅是UIImage(继承自UIView)的方法,所以我们看它的类型前面有UIView,如UIViewContentModeCenter
//    [imgView1 setContentMode:UIViewContentModeCenter];
    //其他类型都是固定位置的,如上下左右左下右上等,下面几个是重点和常用的
    //UIViewContentModeScaleToFill是填满,当然图片会被不等比例的缩放,和没有内容模式属性前一样
    //UIViewContentModeScaleAspectFill是等比例缩放的填满,可以想象有一边长度正好,还有一边有可能超出了整个imgView1的frame边界
    //UIViewContentModeScaleAspectFit是等比例缩放的填充到最大尺寸,可以想见有一边长度正好,还有一边有可能还没达到frame的边界
    [imgView1 setContentMode:UIViewContentModeCenter];
    [self.view addSubview:imgView1];

    //设置动画
    //先弄一个UIImageView准备加载,本来是UIImageView *imgView2=[[UIImageView alloc]init]但imgView2已在顶部声明为全局变量,此处只需初始化即可
    imgView2=[[UIImageView alloc]init];
    imgView2.frame=CGRectMake(30, 150, 40, 40);
    //把需要动画的一系列图片导入到一个数组中,少的话就不需要用for循环导入
    NSMutableArray *arr1=[[NSMutableArray alloc]init];
    for (int i=1; i<=3; i++) {
        UIImage *img2=[UIImage imageNamed:[NSString stringWithFormat:@"%i.png",i]];
        [arr1 addObject:img2];
    }
    //1、先把这个数组装到动画图片中
    imgView2.animationImages=arr1;
    //2、设置播放时间,即每次全部完全播放完的时间
    imgView2.animationDuration=1;
    //3、设置重复播放次数,如不设置或为0时,表示无限循环
    imgView2.animationRepeatCount=0;
    //4、还要启动,才能播放
    [imgView2 startAnimating];
    //当然还要加载进来才能显示
    [self.view addSubview:imgView2];

    //我们再增加一个按钮,来实现开始和停止功能
    UIButton *btn1=[UIButton buttonWithType:UIButtonTypeCustom];
    btn1.frame=CGRectMake(30, 250, 200, 30);
    [btn1 setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
    btn1.backgroundColor=[UIColor grayColor];
    btn1.showsTouchWhenHighlighted=YES;
    [btn1 setTitle:@"停止" forState:UIControlStateNormal];
    btn1.tag=1;
    [btn1 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btn1];
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

//按钮实现的是:点击停止,则按钮变成“开始”,背景绿色,然后动画停止。点击开始,按钮变成“停止”,背景灰色。
//这种按钮的功能其实就类似于播放/暂停键
-(void)btnClick:(id)sender{
    UIButton *btn=(UIButton *)sender;
    if ((int)btn.tag==1) {
        [btn setTitle:@"开始" forState:UIControlStateNormal];
        btn.backgroundColor=[UIColor greenColor];
        [imgView2 stopAnimating];
        btn.tag=2;
    }else{
        [btn setTitle:@"停止" forState:UIControlStateNormal];
        btn.backgroundColor=[UIColor grayColor];
        [imgView2 startAnimating];
        btn.tag=1;

    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

静态效果:

动态效果:

时间: 2024-12-06 07:23:30

【iOS开发-9】图片属性介绍,实现类似于“点击关注”的动画效果,以及顺便实现一个开始/停止按钮切换功能的相关文章

iOS开发基础-图片切换(2)

延续:iOS开发基础-图片切换(1),对(1)里面的代码进行改善. 在 ViewController 类中添加新的数组属性:  @property (nonatomic, strong) NSArray *infoArray; //存放图片信息 通过 self.infoArray 的 getter 方法对其实现初始化(懒加载),其中代码中的 _infoArray 不能用 self.infoArray 替换: 1 //infoArray的get方法 2 - (NSArray *)infoArray

iOS开发基础-图片切换(3)

延续:iOS开发基础-图片切换(2),对(2)里面的代码用属性列表plist进行改善. 新建 Property List 命名为 Data 获得一个后缀为 .plist 的文件. 按如图修改刚创建的文件: 最后,修改 infoArray 的 getter 方法: 1 //infoArray的getter方法 2 - (NSArray *)infoArray { 3 NSLog(@"需要获取图片信息数组"); 4 //只实例化一次 5 if (_infoArray == nil) { 6

visual studio 2015 IOS开发连接mac时提示错误couldn&#39;t connect to xxxx, please try again的一个方法

本人使用虚拟机MAC.原本使用虚拟机中的VS2015连接正常没有问题. 但是当把MAC的虚拟机文件COPY到另一个机器上,提示“couldn't connect to xxxx,  please try again”. 经过查找和升级MAC中的Xamarin.ios都不行.后面尝试添加新的MAC(在VS的连接页面左下角有一个“add mac..."),直接输入MAC的IP,竟然连接上了. 分析原因可能是自动找到的使用MAC机器名的有些问题,但不确定.仅供各位参考. visual studio 2

iOS开发中图片方向的获取与更改

iOS开发中 再用到照片的时候  或多或少遇到过这样的问题  就是我想用的照片有横着拍的有竖着排的  所以导致我选取图片后的效果也横七竖八的   显示效果不好 比如: 图中红圈选中的图片选取的是横着拍的图片 所以显示的头像也是横着的 显示效果不佳 问题描述: 使用过iPhone或者iPad的朋友在拍照时不知是否遇到过这样的问题,将设备中的照片导出到Windows上时,经常发现导出的照片方向会有问题,要么横着,要么颠倒着,需要旋转才适合观看.而如果直接在这些设备上浏览时,照片会始终显示正确的方向,

IOS开发防止图片渲染的方法

IOS开发中,很多时候我们在给导航控制器或者其它的控制器中的部件添加图片的时候,图片会被渲染,下面就是处理图片渲染的方法. UIImage *image = [UIImage imageNamed:@"a.jpg"]; image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

iOS开发-ScrollView图片缩放

智能手机一般常用常用的操作触摸,滑动,缩放,感觉对于生活而言就是手机在手,天下我有,看网页的时候字体太小,缩放一下,看美女的看的不爽,缩放一下,地图看的不清,缩放一下.缩放是一个很常见的操作,不论是从生活还是写程序而言,都是一个绕不开的东西,做了一个Demo,缩放一下美女,熟悉ScrollView中的常见属性的设置,开始正题吧. 常见属性 先看图,要实现的效果: UIImage *image=[UIImage imageNamed:@"girl0.jpg"]; _imageView=[

IOS开发——UI进阶篇(十七)CALayer,核心动画基本使用

一.CALayer简介 1.CALayer在iOS中,文本输入框.一个图标等等,这些都是UIView你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层 @property(nonatomic,readonly,retain) CALayer *layer; 当UIView需

iOS开发中常用的轮子 第四篇 抽屉和侧滑效果

为避免重复造轮子,很多效果和功能都可以从github上找到.清点以前的项目,整理出了很多用过的开源代码,每天奉送一批. 学习例子的方法: 1,了解:运行一遍例子,弄清这些代码的究竟是什么: 2,使用:在之后开发工程中使用这些例子: 3,研究代码:研究例子的代码的实现,简单修改做出自己的效果. 记得要么是facebook,或是twitter第一个使用了个交互效果:而后风靡全球,是产品必用抽屉:再后来就是延生出了各种变形过的效果: 所以,产品经理要你实现抽屉和侧滑效果时,一定要确定到底是什么样抽屉和

【iOS开发-50】利用创建新的类实现代码封装,从而不知不觉实践一个简单的MVC实验

接上次案例谈代码封装.上次案例见:[iOS开发-48]九宫格布局案例:自动布局.字典转模型运用.id和instancetype区别.xib重复视图运用及与nib关系 代码封装的原则是:要保证视图控制器尽量少的接触到其他对象的属性,也就是说,尽量把数据或者属性封装到一个类里面,然后利用类或者对象的方法来调用或者设置数据.而是赤裸裸地把属性都写在视图控制器中.核心作用在于:减少视图控制器的代码量,把数据和属性的处理封装起来,这样也便于其他视图控制器的使用. 要做到的结果就是如下(我们要根据数组里面的