从接触iOS开发到现在已经两年了,但是其实从来没有仔细的学习和研究过iOS开发的相关技术,很多方法和技巧都没有接触过。之后在开发过程中逐渐感到现有的三脚猫功夫实在难当大任,所以决定开始补习iOS开发的各类技术。
这一篇主要是KVO的简单使用,在这里我直接使用了Onevcat的一个demo进行学习,原文可见:iOS中使用blend改变图片颜色
KVO的原理不多解释了,很多网站都解释的很透彻。
主要的两个函数是
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
以及
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
首先我在ViewController中添加了属性color,这个也是我们需要观察的属性。
@property (nonatomic, strong) UIColor *color;
之后在ViewDidLoad中设置observer
- (void)viewDidLoad
{
[super viewDidLoad];
[self addObserver:self.ivStar forKeyPath:@"color" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
}
我将IBAction函数中的直接修改图片颜色改为修改color的value
- (IBAction)changeStarColor:(id)sender {
[self setValue:[UIColor colorWithRed:self.redSlider.value green:self.greenSlider.value blue:self.blueSlider.value alpha:1] forKey:@"color"];
}
最后,在observer中实现以下函数
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
self.image = [self.image imageWithGradientTintColor:(UIColor *)[change objectForKey:NSKeyValueChangeNewKey]];
}
运行,成功!
参考网站:
iOS KVO & KVC
objc中国KVO/KVC