重写UIImageView的image属性---

效果:

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

源码:

UIImageView.h  +  UIImageView.m

//
//  LiveImageView.h
//  Progress
//
//  Copyright (c) 2014年 L.S. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface LiveImageView : UIImageView

@property (nonatomic, assign)  CGFloat  duration;

@end

//
//  LiveImageView.m
//  Progress
//
//  Copyright (c) 2014年 L.S. 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,赋值都是没有显式动画的.

//  LRootViewController.m
//  UIImageTest//  Copyright (c) 2014年 L.S. All rights reserved.
//

#import "LRootViewController.h"
#import "LiveImageView.h"

@interface LRootViewController ()
{
    NSArray *_imageArray;
    LiveImageView *liveView;
     __block int count;
}
@end

@implementation LRootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    _imageArray=[NSArray arrayWithObjects:[UIImage imageNamed:@"33.jpg"],[UIImage imageNamed:@"44.jpg"],[UIImage imageNamed:@"66.jpg"],nil];

    liveView=[[LiveImageView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
    [self.view addSubview:liveView];
    liveView.center=self.view.center;
    NSTimer *timer=[NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(changeImage) userInfo:nil repeats:YES];
    [timer fire];

}

-(void)changeImage
{

    //改变图片
    [UIView animateWithDuration:0.3f animations:^{
        liveView.duration=0.3f;
        liveView.image=_imageArray[count++%3];//count++%4这是循环取数组中的对象
        //改变尺寸的效果
        CGRect tmpRect=liveView.bounds;
        tmpRect.size = liveView.image.size;
        liveView.bounds=tmpRect;
        liveView.center=self.view.center;

    }];

}

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

重写UIImageView的image属性---

时间: 2024-11-01 19:46:12

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

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

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

UiImageView控件属性

UIImageView控件属性: 1.Image 设置图片,默认显示 UIImageView *_imageView = [[UIImageView alloc]init]; _imageView.image = [UIImage imageNamed:@"me.png"]; 2.highlightedImage 设置高亮状态下显示的图片 _imageView.highlightedImage = [UIImage imageNamed:@"other.png"];

[BS-24] UIImageView的contentMode属性

UIImageView的contentMode属性 所有的UIView都有个contentMode属性,UIImageView继承自UIView,我们在使用UIImageView时,经常要考虑这些图片是否需要拉伸,采用哪种拉伸模式等,这就要求我们正确理解UIImageView的ContentMode的这些参数. UIViewContentModeScaleToFill, //默认使用该模式 UIViewContentModeScaleAspectFit, // contents scaled t

通过 CALayer 修改 UIImageView 的界面属性

界面属性的修改是每一个开发者必须知道的,为什么我就记不住呢, shit, 又耽误了时间,为了防止再找不到,特把一些常用的 CALayer属性记在这里,顺便分享 1.设置阴影 1 imageView.layer.shadowColor = [UIColor grayColor].CGColor; 2 imageView.layer.shadowOffset = CGSizeMake(10, 10); 3 imageView.layer.shadowOpacity = 0.5; * 第1行设置阴影的

[Swift]Swift图片显示方式设置,控件UIImageView的contentMode属性设置

contentMode属性是用来设置图片在UIImageView中的显示方式,如:拉伸.居中.填充等. 这里讨论的是UIImageView宽高固定,图片宽高不确定的情况.如社交APP的相册缩略图.手机版QQ空间相册的小图. Swift中提供多种设置方式,这里只说一种比较常用的. 一般流行的做法是,让宽或高缩小一定的比例,然后居中显示,图中红色框部分就是UIImageView的尺寸.如下图:   话说得有点多了,其实就两句代码: //设置图片显示方式 cell.imgView.contentMod

UIImageView 的contentMode属性应用

UIImageView 的contentMode这个属性是用来设置图片的显示方式,如居中.居右,是否缩放等,有以下几个常量可供设定:UIViewContentModeScaleToFillUIViewContentModeScaleAspectFitUIViewContentModeScaleAspectFillUIViewContentModeRedrawUIViewContentModeCenterUIViewContentModeTopUIViewContentModeBottomUIVi

重写函数对象prototype属性值的不同的情况下实例对象的内部属性Prototype值有所不同

http://www.cnblogs.com/cmptlgg/ 我的博客园 重写函数对象的prototype属性值:会切断实例的[[Prototype]]内部属性和最初函数对象的prototype(原型对象)的联系 这个例子引用js高级第三版: /* 这是高三对此实现的解释. 尽管可以随时为原型添加属性和方法,并且修改能够立即在所有对象实例中反映出来,但如果是重 写整个原型对象,那么情况就不一样了.我们知道,调用构造函数时会为实例添加一个指向最初原型的 [[Prototype]]指针,而把原型修

Rails中重写Active Record字段属性

系统重构或升级时偶尔会碰到需要重写某个字段的情况,例如: 1. 读取user的name字段时,实际返回name_new字段 class User < ActiveRecord::Base def name attribute(:name_new) end end 2. 修改属性时做一些其他操作(这种场景也可以使用回调来实现) class User < ActiveRecord::Base def name=(value) # actions write_attribute(:name,valu

python0.16------构造函数/析构函数/self详解/重写/访问限制/对象属性和类属性/@property/运算符重载

构造函数:__init__()引子:因为每个人一出生都是不一样的.因此,如果在Person类中直接给类元素赋值有问题,它会导致每个人的初始状态相同,这不符合大自然的逻辑.应该根据每个人的特点,给每个出生的人不一样的特性.可以通过构造函数实现这个想法.__init__()函数在使用类创建对象自动调用.注意:如果不显式写出构造函数,默认会添加一个空的构造函数. 使用构造函数:def __init__(self,name,age,height,weight):#一般定义属性在构造函数里面定义. sel