Mac OS 开发 -- 直接扩展系统类的属性之NSView添加backgroudColor属性
来源:互联网 发布:网络大学是什么 编辑:程序博客网 时间:2024/06/06 18:10
使用class_getInstanceMethod方法交换本来的draw方法到自己定义的draw方法,然后绘制背景色
@implementation NSView(BackgroudColor)
@dynamic backgroundColor;
@dynamic gradientColor;
- (void)setBackgroundColor:(NSColor *)backgroundColor{
objc_setAssociatedObject(self, [@"backgroundColor" UTF8String], backgroundColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
static dispatch_once_t once;
dispatch_once(&once, ^{
Method method1 = class_getInstanceMethod([NSView class], @selector(drawRect:));
Method method2 = class_getInstanceMethod([NSView class], @selector(__My_Draw_Rect__:));
method_exchangeImplementations(method1, method2);
});
[self setNeedsDisplay:YES];
}
- (void)setGradientColor:(NSGradient *)gradientColor{
objc_setAssociatedObject(self, [@"gradientColor" UTF8String], gradientColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
[self setNeedsDisplay:YES];
}
- (NSColor *)getBackgroundColor{
NSColor *color = objc_getAssociatedObject(self,[@"backgroundColor" UTF8String]);
return color;
}
- (NSGradient *)getGradientColor{
NSGradient *gradient = objc_getAssociatedObject(self,[@"gradientColor" UTF8String]);
return gradient;
}
- (void)__My_Draw_Rect__:(NSRect)dirtyRect{
[self __My_Draw_Rect__:dirtyRect];
NSColor *backgroudColor = [self getBackgroundColor];
if(backgroudColor){
[backgroudColor set];
NSRectFill(dirtyRect);
}
NSGradient *gradient = [self getGradientColor];
if(gradient){
[gradient drawInRect:[self bounds] angle:-90];
}
}
@end
- Mac OS 开发 -- 直接扩展系统类的属性之NSView添加backgroudColor属性
- Swift - 类扩展, 添加属性
- Swift给系统的类扩展属性
- js 直接添加属性
- ecshop开发之属性直接填写价格
- iOS 扩展类添加属性,需要实现的set方法
- 【Cocoa(mac) Application 开发系列之三】自定义NSView并绘制一些常见的图形及字符串;
- 【Cocoa(mac) Application 开发系列之三】自定义NSView并绘制一些常见的图形及字符串;
- 【Cocoa(mac) Application 开发系列之三】自定义NSView并绘制一些常见的图形及字符串;
- iOS开发之category动态添加属性的方法------关联
- Mac OS 的属性列表文件plist装换
- PHP扩展开发-类成员属性
- mac下文件带有扩展属性的问题
- 为 android的系统控件添加属性
- Cocoa NSView 设置背景色(mac OS X )
- Android系统开发 - 扩展Androidmanifest.xml文件中<application>标签的属性
- Mac OS X 信息属性列表关键字
- 扩展eXtremeTable的属性
- 控件的阴影效果
- Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法
- mono嵌入式应用研究(二):虚拟机的初始化
- 噪声库(noiseX-92)
- Python中"=“,浅复制和深复制的理解
- Mac OS 开发 -- 直接扩展系统类的属性之NSView添加backgroudColor属性
- 阿里云RDS不支持FEDERATED引擎
- 哪里可以买卖中国大数据
- Storm-Starter分析————ReachTopology
- 解决在极光推送的时候会出现一个 JPush提示:缺少统计代码
- angular.js实现列表orderby排序
- oracle自定义类型
- Day4、Python
- 序