0

色を設定した配列がありますが、ビューをスワイプすると、常に配列の最後の項目に色が変わります。

私は何が欠けていますか?forループは正しく設定されていますか?

これが私のコードです:

- (void)singleLeftSwipe:(UISwipeGestureRecognizer *)recognizer
{
    UIColor * whiteColor = [UIColor whiteColor];
    UIColor * blueColor = [UIColor blueColor];
    UIColor * redColor = [UIColor redColor];

    _colorArray = [[NSArray alloc] initWithObjects:blueColor, redColor, whiteColor, nil];

    for (int i = 0; i < [_colorArray count]; i++)
    {
        id colorObject = [_colorArray objectAtIndex:i];
        _noteView.aTextView.backgroundColor = colorObject;
    }

}

ありがとう!

4

1 に答える 1

1

いいえ、ループが正しく設定されていません。スワイプするたびにループするべきではありません。ループ全体がスワイプごとに実行されます。これにより、すべての色がステップスルーされ、ビューの色がその色に設定されます。当然、最後の色が見られる色です。

代わりに、インデックスをメモリに保持し、スワイプするたびにインクリメント/デクリメントします。スワイプするたびに、ビューの色を更新します。

// Declare two new properties in the class extension
@interface MyClass ()

@property (nonatomic) NSInteger cursor;
@property (nonatomic, strong) NSArray *colorArray;
...

@end

//In your designated initializer (may not be init depending on your superclasses)
//Instantiate the array of colors to choose from.
- (id)init {
    self = [super init];
    if (self) {
        _colorArray = @[ [UIColor whiteColor], [UIColor blueColor], [UIColor redColor] ];
    }
    return self;
}

//Implement your gesture recognizer callback.
//This handles swipes to the left and right. Left swipes advance cursor, right swipes decrement
- (void)singleSwipe:(UISwipeGestureRecognizer *)recognizer
{
    UISwipeGestureRecognizerDirection direction = [recognizer direction];
    if (direction == UISwipeGestureRecognizerDirectionLeft) {
        // Increment cursor
        self.cursor += 1;
        // If cursor is outside bounds of array, wrap around.
        // Chose not to use % to be more explicit.
        if (self.cursor >= [self.colorArray count]) {
            self.cursor = 0;
        }
    }
    else if (direction == UISwipeGestureRecognizerDirectionRight) {
        // Decrement cursor
        self.cursor -= 1;
        // If outside bounds of array, wrap around.
        if (self.cursor < 0) {
            self.cursor = [self.colorArray count] - 1;
        }
    }

    // After adjusting the cursor, we update the color.
    [self showColorAtCursor];
}


// Implement a method to change color
- (void)showColorAtCursor
{
    UIColor *c = self.colorArray[self.cursor];
    _noteView.aTextView.backgroundColor = c;
}
于 2013-03-25T03:34:23.877 に答える