從接觸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