重写UIImageView的image属性

重写UIImageView的image属性

 

效果:

当你重写了UIImageView的image属性后你就会对UIImageView怎么显示图片了如指掌了:)

 

源码:

UIImageView.h  +  UIImageView.m

//
//  LiveImageView.h
//  Progress
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface LiveImageView : UIImageView

@property (nonatomic, assign)  CGFloat  duration;

@end
//
//  LiveImageView.m
//  Progress
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "LiveImageView.h"

@interface LiveImageView ()

{
    CALayer  *_Layer;
}

@end

@implementation LiveImageView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        _duration = 0.3f;
        _Layer = self.layer;
    }
    return self;
}

// 重写image的setter与getter方法
@synthesize image = _image;

- (void)setImage:(UIImage *)image
{
    if (_image != image)
    {
        CABasicAnimation *ani = [CABasicAnimation animationWithKeyPath:@"contents"];
        ani.fromValue = (__bridge id)(_image.CGImage);
        ani.toValue   =  (__bridge id)(image.CGImage);
        ani.duration  = _duration;
        _Layer.contents = (__bridge id)(image.CGImage);
        [_Layer addAnimation:ani forKey:nil];

        _image = image;
    }
}

- (UIImage *)image
{
    return _image;
}

@end

以下是核心代码:

系统的setter方法绝对是这么写的哦:),亲自测试,因为是backed layer,赋值都是没有显式动画的.

以下地方是改变尺寸的动画代码

时间: 2024-12-31 18:42:27

重写UIImageView的image属性的相关文章

重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件

重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件 为什么会需要这样子的一种方法来实现隐藏或者显示一个cell中的某些控件呢? 其实,隐藏cell中某些控件可以直接在tableView:cellForRowAtIndexPath:方法中直接实现,我们需要判断外部变量比如bool值来决定是否显示这个控件,但需要额外的代码写在tableView:cellForRowAtIndexPath:方法当中,如果我们把bool值传递给该cell让其自己判断是否

springMVC4(9)属性编辑器剖析入参类型转换原理

我们通过Http请求提交的参数都以字符串的形式呈现,但最终在springMVC的方法入参中,我们却能得到各种类型的数据,包括Number.Boolean.复杂对象类型.集合类型.Map类型等,这些都是springMVC内置的数据类型转换器帮我们完成的.springMVC的将请求数据绑定到方法入参的流程如下所示: Created with Raphaël 2.1.0数据绑定流程图解ServletRequestServletRequestDataBinderDataBinderConversionS

在定义一个js类的时候,为什么要设置该类的prototype属性为它所要继承的类的

在定义一个js类的时候,为什么要设置该类的prototype属性为它所要继承的类的实例对象 在写JavaScript类定义的时候,大家很可能都写过下面的代码: function A() {} function B() {} B.prototype = new A() 上面这样写是为了让instanceof语句能起作用.举个例子: 1.不重写子类的prototype属性 b = new B(); b instanceof B //return true b instanceof A // retu

java ee-java OJ中为什么要重写toString方法

问题描述 java OJ中为什么要重写toString方法 如题,看别人代码,实体类中重写了toString方法,为什么要写出下面这样?有什么好处? @Override public String toString() { return ToStringBuilder.reflectionToString(this); } 解决方案 默认类的toString不输出属性,这个重写后可以输出属性值.这重写不重写看自己需要

UiimageView的高亮图片设置 iOS

问题描述 UiimageView的高亮图片设置 iOS 怎么在uiimageView添加的手势的点击事件里改变图片的的状态,就是和button一样,点击的时候会有高亮 解决方案 iOS UIImageView设置多张图片ios UIImageView 设置图片 不变形 解决方案二: UIImageView自身不带这个行为,你需要在点击事件里,自己处理,最简单用两个图片,一个高亮的图片,点击的时候替换图片 解决方案三: UIImageView有这个属性:highlightedImage 以及hig

一个抽象类中只有抽象属性,没有抽象方法可以吗?

问题描述 我在继承类中override这个属性,这样使用正确吗?(我只是考虑语法,暂且不考虑这样使用的实际意义)恳请大神指教~~~ 解决方案 解决方案二:这样做,编译和运行都不会报错,但是我想问下,为什么要把属性定义为抽象的?要在继承类中重写,可以把属性定义成virtual解决方案三:类里面什么都没有都可以,更何况有东西呢解决方案四:我是来看头像的好吧,抽象类的概念是,拥有抽象方法的类按照你的描述,你应该使用的是接口over解决方案五:引用3楼cancerser的回复: 我是来看头像的好吧,抽象

重写WndProc后的奇怪现象

问题描述 通过继承TextBox扩展了一个文本框,加入一些新的功能,比如如下代码中用来防止被"星号密码查看器"等工具窥探星号密码的处理:///<summary>///是否允许以程序方式读取文本///</summary>privatebool_allowProgramReadText=false;privateconstintWM_GETTEXT=0x000D;privateconstintEM_GETLINE=0x00C4;///<summary>/

js判断属性是否存在?

obj.hasOwnProperty(attribute):   可以检测一个属性是否存在于一个实例对象中,还是存在于原型对象中,若存在于实例对象中,则返回true,示例:  代码如下 复制代码 function Person (argument) { // this.name="overwrite"; //构造函数中重写属性 } Person.prototype={ name:"Nike", sayName:function(){ alert(this.name)

Javascript的构造函数和constructor属性_javascript技巧

例如,在Chrome下调试如下程序,很清楚的展示了这点:   然而事情并不是这么简单.再看下面的代码: 很显然,这个时候obj的constructor已经不再是创建它的函数,注意到obj.name也是undefined,因此修改构造函数的prototype的contructor并不会影响构造函数所产生的对象.真正的原因是:一个对象的constructor是它的构造函数的prototype.constructor,而每一个函数都有一个prototype,默认情况下,这个prototype有一个co