На этот вопрос есть 2 ответа: как это сделать с помощью объектов C4 и как это сделать с помощью Interface Builder/UIControls. Я покажу оба способа, сначала пользовательский интерфейс, чтобы потом сравнить способ C4.
UIControl
Чтобы сделать это с помощью UIControls, сначала настройте заголовок C4WorkSpace.h
, чтобы он имел следующие методы и свойства:
@property (assign, nonatomic) IBOutlet UILabel *myLabel;
@property (assign, nonatomic) IBOutlet UISlider *mySlider;
@property (assign, nonatomic) IBOutlet UIStepper *myStepper;
-(IBAction)sliderWasUpdated:(UISlider *)slider;
-(IBAction)stepperWasUpdated:(UIStepper *)stepper;
Затем перетащите все три компонента в файл XIB вашего проекта (например, UISlider, UILabel и UIStepper). Свяжите действие sliderWasUpdated:
с ползунком с помощью параметра valueChanged
, а действие stepperWasUpdated:
со степпером также с помощью параметра valueChanged
. Вы делаете этот шаг, выбирая C4Canvas.xib
из своего проекта, затем щелкая правой кнопкой мыши желтый куб, а затем перетаскивая действия, перечисленные во всплывающем меню, на каждый из объектов, которые вы недавно разместили на холсте.
Затем добавьте следующий код в файл C4WorkSpace.m
:
@implementation C4WorkSpace
-(void)setup {
self.myStepper.minimumValue = 0.0f;
self.myStepper.maximumValue = 10.0f;
self.mySlider.minimumValue = 0.0f;
self.mySlider.maximumValue = 10.0f;
}
-(IBAction)sliderWasUpdated:(UISlider *)slider {
slider.value = [C4Math round:slider.value];
self.myLabel.text = [NSString stringWithFormat:@"%4.2f",slider.value];
self.myStepper.value = slider.value;
[self.myLabel sizeToFit];
}
-(IBAction)stepperWasUpdated:(UIStepper *)stepper {
self.myLabel.text = [NSString stringWithFormat:@"%4.2f",stepper.value];
self.mySlider.value = stepper.value;
[self.myLabel sizeToFit];
}
@end
В setup
мы удостоверяемся, что минимальные/максимальные значения обоих объектов пользовательского интерфейса одинаковы (чтобы мы могли поддерживать их соответствие).
В методе stepperWasChanged:
мы делаем две вещи:
- Мы используем значение степпера для установки текста метки.
- Мы также используем значение степпера для установки значения ползунка!
В методе sliderWasChanged:
мы делаем то же самое, обновляя степпер, но также округляем значение ползунка, чтобы оно увеличивалось пошагово (просто для аккуратности).
C4Control
Чтобы сделать то же самое с объектами C4, вместо нативных объектов пользовательского интерфейса мы настраиваем все немного по-другому. Во-первых, мы ничего не добавляем к нашему C4Canvas.xib
, вместо этого мы настроим объекты вручную.
В файле C4WorkSpace.h
добавьте следующие строки кода:
@property (readwrite, nonatomic, strong) C4Label *myLabel;
@property (readwrite, nonatomic, strong) C4Slider *mySlider;
@property (readwrite, nonatomic, strong) C4Stepper *myStepper;
-(void)sliderWasUpdated:(C4Slider *)slider;
-(void)stepperWasUpdated:(C4Stepper *)stepper;
Обратите внимание, что в основном это то же самое, за исключением того, что мы используем C4 вместо префиксов пользовательского интерфейса. Кроме того, мы называем наши методы -(void)
вместо -(IBAction)
, потому что мы не используем Interface Builder.
Затем добавьте следующий код в свой C4WorkSpace.m
:
@implementation C4WorkSpace
-(void)setup {
[self createAddObjects];
//calibrate the min/max values
self.myStepper.minimumValue = 0.0f;
self.myStepper.maximumValue = 10.0f;
self.mySlider.minimumValue = 0.0f;
self.mySlider.maximumValue = 10.0f;
}
-(void)sliderWasUpdated:(C4Slider *)slider {
slider.value = [C4Math round:slider.value];
self.myLabel.text = [NSString stringWithFormat:@"%4.2f",slider.value];
self.myStepper.value = slider.value;
[self.myLabel sizeToFit];
}
-(void)stepperWasUpdated:(C4Stepper *)stepper {
self.myLabel.text = [NSString stringWithFormat:@"%4.2f",stepper.value];
self.mySlider.value = stepper.value;
[self.myLabel sizeToFit];
}
-(void)createAddObjects {
//set up the objects
self.myLabel = [C4Label labelWithText:@"values"];
self.myStepper = [C4Stepper stepper];
self.mySlider = [C4Slider slider:CGRectMake(0, 0, 192, 44)];
//position them
CGPoint centerPoint = CGPointMake(self.canvas.center.x,
self.canvas.center.y - 100);
self.myStepper.center = centerPoint;
centerPoint.y += 100;
self.myLabel.center = self.canvas.center;
centerPoint.y += 100;
self.mySlider.center = centerPoint;
//set up action bindings
[self.mySlider runMethod:@"sliderWasUpdated:"
target:self
forEvent:VALUECHANGED];
[self.myStepper runMethod:@"stepperWasUpdated:"
target:self
forEvent:VALUECHANGED];
[self.canvas addObjects:@[self.myStepper,self.myLabel,self.mySlider]];
}
@end
РАЗЛИЧИЯ
Основное различие между этими двумя подходами заключается в том, используете ли вы Interface Builder или нет. В подходе C4 нам нужно добавить в наш проект метод с именем createAddObjects
, чтобы наш ползунок, метка и степпер были добавлены на холст.
Этот метод также содержит методы для привязки действий наших C4UIElements к нашему коду, что происходит в строках:
[self.mySlider runMethod:@"sliderWasUpdated:"
target:self
forEvent:VALUECHANGED];
[self.myStepper runMethod:@"stepperWasUpdated:"
target:self
forEvent:VALUECHANGED];
После их настройки единственное различие заключается в указании использования объектов C4 вместо объектов пользовательского интерфейса, например:
-(void)sliderWasUpdated:(C4Slider *)slider {...}
вместо
-(IBAction)sliderWasUpdated:(UISlider *)slider {...}
person
C4 - Travis
schedule
20.05.2013