我正在製作一個顏色選擇器。我有以下代碼:如何阻止不必要地通過這兩種方式傳遞的值?
查看或者Controller.h:
@interface ColorPickerViewController : UIViewController <HueSliderDelegate> {
HueSlider *hueSlider;
float hue;
}
@property (nonatomic, assign) float hue;
@end
查看Controller.m或者:
-(void)setHue:(float)hueLocal {
hue = hueLocal;
hueSlider.hue = self.hue;
}
-(void)hueChanged {
self.hue = hueSlider.hue;
}
HueSlider.h:
@protocol HueSliderDelegate <NSObject>
-(void)hueChanged;
@end
@interface HueSlider : UISlider {
HueSlider *hueSlider;
float hue;
}
@property (nonatomic, assign) float hue;
@end
HueSlider.m:
//the hue float can be set when the user moves the slider
-(void)setHue:(float)hueLocal {
hue = hueLocal;
slider.value = self.hue;
[self.delegate hueChanged];
}
問題是用戶更改了值,滑塊將更改發送到視圖控制器。視圖控制器然後改變它的色調值,該值將變化發回到滑塊。不需要將它發送回滑塊,並且如果用戶沿着滑塊移動,它將跳回原來的位置。有關如何以不同方式編碼以阻止這種情況的建議?
注意:它實際上並不是一個滑塊,但是我把問題放到了這個上下文中,因爲它不像描述我製作的自定義控件那麼複雜,它與滑塊類似。
一旦通過代碼發生更改(而不是用戶操作),不從控件向視圖控制器發送hueChanged如何? – Till
爲什麼不只是將ColorPickerViewController的色調基於滑塊設置的任何值並在您的ViewController的.h文件中跳過'float hue;'聲明? –