给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

分析



目录
相关文章
|
运维 大数据 云计算
|
6月前
|
消息中间件 安全
为什么会选择使用RabbitMQ ? 有什么好处 ?
选择使用RabbitMQ是因为RabbitMQ的功能比较丰富 , 支持各种消息收发模式(简单队列模式, 工作队列模式 , 路由模式 , 直接模式 , 主题模式等) , 支持延迟队列 , 惰性队列而且天然支持集群, 保证服务的高可用, 同时性能非常不错 , 社区也比较活跃, 文档资料非常丰富 使用MQ有很多好处: ● 吞吐量提升:无需等待订阅者处理完成,响应更快速 ● 故障隔离:服务没有直接调用,不存在级联失败问题 ● 调用间没有阻塞,不会造成无效的资源占用 ● 耦合度极低,每个服务都可以灵活插拔,可替换 ● 流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去
|
10月前
|
Cloud Native 持续交付 云计算
云原生入门指南:从容器到微服务
【10月更文挑战第28天】在数字化转型的浪潮中,云原生技术成为推动现代软件开发的关键力量。本篇文章将带你了解云原生的基本概念,探索它如何通过容器化、微服务架构以及持续集成和持续部署(CI/CD)的实践来提升应用的可伸缩性、灵活性和可靠性。你将学习到如何利用这些技术构建和部署在云端高效运行的应用,并理解它们对DevOps文化的贡献。
171 2
|
存储 Java Linux
linux安装Zookeeper的详细步骤
linux安装Zookeeper的详细步骤
637 5
|
JavaScript 前端开发
vue中使用rem实现动态改变字体大小
vue中使用rem实现动态改变字体大小
598 0
|
SQL NoSQL Java
接口幂等性
接口幂等性
|
数据挖掘
ENVI:分类后处理_小斑块去除_Majority/Minority处理、聚类处理、过滤处理等
ENVI:分类后处理_小斑块去除_Majority/Minority处理、聚类处理、过滤处理等
1501 0
|
NoSQL Linux Redis
Redis中的事件驱动框架(一)
Redis中的事件驱动框架
453 0
|
弹性计算
阿里云服务器免费试用1个月到期不用请释放否则会欠费
阿里云服务器免费试用1个月到期了怎么办?不要了就释放掉,想要继续使用可以将按量转为包年包月并续费
3655 0
阿里云服务器免费试用1个月到期不用请释放否则会欠费