iPhone UIViews - как связать переменные с UIView? - PullRequest
1 голос
/ 22 мая 2011

Я новичок в iphone и xcode.Это может быть очень простой вопрос, но я не смог найти пример кода в книгах.Я хочу сделать следующее:

  • Иметь 2 UIView на экране
  • Каждый вид будет проходить через цвет радуги (красный / оранжевый / желтый / зеленый / синий / индиго/ violet) с использованием распознавателя жестов, например, если текущий цвет зеленый, если пользователь проведет пальцем вверх, UIView изменится на желтый, если пользователь проведет пальцем вниз, UIView изменится на синий.
  • Следовательно, каждому представлению потребуетсячтобы сохранить текущий цвет и соответствующим образом реагировать на свипы.

Я понимаю, как реализовать обнаружение свипов с помощью распознавателя жестов, но не знаю, как каждому виду сохранить отдельную переменную длятекущий цвет.Я хочу универсальный код, потому что в моем приложении будет более 2 UIViews, как только я выясню, как это делается.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 22 мая 2011

возможно, определяя подкласс UIView примерно так:

@interface RainbowView : UIView {
    UIColor *currentColor;
}

@property (nonatomic, retain) UIColor *currentColor;
@end

и создание 2 (или более) представлений этого класса в вашем контроллере представлений в качестве выходов (если вы используете построитель интерфейса):

@class RainbowView;
@interface RainBowViewController : UIViewController {
     RainbowView *rainbowView1;
     RainbowView *rainbowView2;
}

@property (nonatomic, retain) IBOutlet RainbowView *rainbowView1;
@property (nonatomic, retain) IBOutlet RainbowView *rainbowView2;
@end
2 голосов
/ 22 мая 2011

Вы можете создать подкласс UIView для включения любых переменных, которые вам нравятся:

ColorSwiperView.h

@interface ColorSwiperView : UIView
{
    ColorType currentColor;
}
@property (nonatomic, assign) ColorType currentColor;
@end

ColorSwiperView.m

@implementation ColorSwiperView
@synthesize currentColor;

- (id)initWithFrame:(CGRect)frameRect
{
    if ((self = [super initWithFrame:frameRect]) == nil) { return nil; }
    currentColor = red;
    return self;
}

@end

Используется следующим образом:

#import "ColorSwiperView"

...

ColorSwiperView * cView = [[ColorSwiperView alloc] initWithFrame:...];
cView.currentColor = green;

Примечание: предполагается, что вы определили перечисление для цветов:

typedef enum
{
    red = 0,
    green = 1,
    ...
}
ColorType;
1 голос
/ 22 мая 2011

Поскольку вы собираетесь поддерживать массив цветов, скажем colorsArray, и назначьте представлениям их цвет из этого выбора. Вы можете сделать это в обработчике прокрутки.

- (void)handleSwipe:(UISwipeGestureRecognizer*)swipeGesture {
    UIView *view = swipeGesture.view;

    NSInteger currentColorIndex = [colorsArray indexOfObject:view.backgroundColor];
    NSInteger nextColorIndex = currentColorIndex + 1;
    if ( nextColorIndex == [colorsArray count] ) {
        nextColorIndex = 0;
    }

    view.backgroundColor = [colorsArray objectAtIndex:nextColorIndex];
}

Таким образом, вам не нужно создавать подклассы.

Наследование

Вы можете создать подкласс UIView и добавить к нему собственные переменные экземпляра. Скажем,

@interface RainbowView: UIView {
    NSInteger currentColorIndex;
}

@property (nonatomic, assign) NSInteger currentColorIndex;
...

@end

@implementation RainbowView

@synthesize currentColorIndex;

...

@end

В вашем методе обработки жестов,

- (void)handleSwipe:(UISwipeGestureRecognizer*)swipeGesture {
    RainbowView *aView = (RainbowView*)swipeGesture.view;

    // Get the next color index to aView.currentColorIndex;
    aView.backgroundColor = [colorsArray objectAtIndex:nextColorIndex];
    aView.currentColorIndex = nextColorIndex;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...