我是iphone和xcode的新手。这可能是一个非常简单的问题,但我在书中找不到示例代码。我想做以下事情:
我理解如何使用手势识别器实现滑动检测,但我不知道如何让每个视图为当前颜色保留单独的变量。我想要一个通用代码,因为一旦我弄清楚它是如何完成的,我的应用程序中将会有超过2个UIView。
提前致谢。
答案 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;
}