给category添加基本数据类型属性

简介:

给category添加基本数据类型属性

 

 

说明

通常,我们添加属性都是通过对象扩展来实现的,其实,我们也可以用runtime来添加基本数据类型的属性

 

源码


//
//  UIView+AnimationProperty.h
//  RuntimeCategory
//
//  Created by YouXianMing on 15/7/8.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIView (AnimationProperty)

@property (nonatomic) CGFloat  scale;

@end


//
//  UIView+AnimationProperty.m
//  RuntimeCategory
//
//  Created by YouXianMing on 15/7/8.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "UIView+AnimationProperty.h"
#import <objc/runtime.h>

@implementation UIView (AnimationProperty)

NSString * const _recognizerScale = @"_recognizerScale";
- (void)setScale:(CGFloat)scale {

    objc_setAssociatedObject(self, (__bridge const void *)(_recognizerScale), @(scale), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    self.transform = CGAffineTransformMakeScale(scale, scale);
}
- (CGFloat)scale {

    NSNumber *scaleValue = objc_getAssociatedObject(self, (__bridge const void *)(_recognizerScale));
    return scaleValue.floatValue;
}

@end


//
//  ViewController.m
//  RuntimeCategory
//
//  Created by YouXianMing on 15/7/8.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "ViewController.h"
#import "UIView+AnimationProperty.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *redView         = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];
    
    
    UIView *greenView         = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    greenView.backgroundColor = [UIColor greenColor];
    greenView.scale           = 0.5f;
    [self.view addSubview:greenView];

}


@end

分析



目录
相关文章
|
10月前
|
存储 JavaScript 前端开发
JavaScript】基本数据类型与引用数据类型区别(及为什么String、Boolean、Number基本数据类型会有属性和方法?)
JavaScript】基本数据类型与引用数据类型区别(及为什么String、Boolean、Number基本数据类型会有属性和方法?)
70 0
|
10月前
|
C#
C#数据类型(object)
C#数据类型(object)
82 0
|
JavaScript
Object(对象)中的属性
js Object(对象)中的属性
67 0
|
JavaScript API 开发者
你知道toString()可以获取变量的数据类型吗?
js是弱类型语言,或者说是动态语言,在定义变量时我们可以不提前声明变量的类型,也可以在变量声明后赋予不同类型的值。变量的类型会在程序运行的过程中被确定。对于开发者来说,虽然可以不用频繁的定义不同的数据类型,但是如果是比较复杂的项目,或者接手他人的项目,发现一个变量到处被使用并且赋予不同类型的值,也许头都大了。变量类型的不确定还可能出现运行时报错:`xxx is not a function`,根本原因就是不同的数据类型所具有的方法是不一样的,也许有的大家都有,因此不报错;但是如果是特有的,或者有差异的,不判断变量的类型就直接调用,就有可能出现生产bug。那么应该如何才能获取准确的变量类型呢?
183 0
|
编译器
字段是字段,属性是属性,字段不是属性,属性看getter或setter
字段是字段,属性是属性,字段不是属性,属性看getter或setter
102 0
字段是字段,属性是属性,字段不是属性,属性看getter或setter
|
JavaScript
对Object属性理解
对Object属性理解
144 0
|
C#
为普通Object添加类似AttachedProperty的属性
原文:为普通Object添加类似AttachedProperty的属性                          为普通Object添加类似AttachedProperty的属性                   周银辉   我们知道,在WPF中对应一个DependencyObject,我们很容易通过AttachedProperty来为类型附加一个属性。
589 0
|
C#
C# 类相同属性赋值
原文:C# 类相同属性赋值 做项目时偶尔B类赋值给A类,碰巧A和B类型很多属性字段名是一样的,或者只是大小写不一样,这是可以利用泛型,反射来写一个自动化赋值的方法。 下面方法不考虑大小写不一样的情况,如果要考虑,可以使用字符串方法 ToUpper() 、ToLower() 后,对比字段名是否一样。
1217 0

热门文章

最新文章