iPhone UIViews - 如何将变量与UIView关联?

时间:2011-05-22 06:04:55

标签: iphone xcode

我是iphone和xcode的新手。这可能是一个非常简单的问题,但我在书中找不到示例代码。我想做以下事情:

  • 屏幕上有2个UIView
  • 每个视图将使用手势识别器逐步浏览彩虹的颜色(红色/橙色/黄色/绿色/蓝色/靛蓝/紫色),例如,如果当前颜色为绿色,如果用户向上滑动UIView更改为黄色,如果用户向下滑动UIView变为蓝色。
  • 因此,每个视图都需要保持当前颜色并相应地响应滑动。

我理解如何使用手势识别器实现滑动检测,但我不知道如何让每个视图为当前颜色保留单独的变量。我想要一个通用代码,因为一旦我弄清楚它是如何完成的,我的应用程序中将会有超过2个UIView。

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以将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 :(得分:2)

或许定义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 :(得分:1)

由于您要维护一组颜色,例如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;
}