Можно ли использовать UIPickerView в cocos2d?

Я разрабатываю игру для iPhone 2d с помощью cocos2d. Мне нужен сборщик. Можно ли использовать Picker в cocos2d! Если возможно, скажите мне, как я могу использовать сборщик в cocos2d?

Ответов (1)

Решение

Да, вы можете смешивать и сопоставлять стандартные классы на основе UIView с классами Cocos2D.

В делегате приложения при запуске Director вы создали UIWindow и прикрепили к нему Director. Вы также можете сохранить ссылку на окно в вашем appdelegate. Теперь вы можете создавать и добавлять UIView в окно, а также управлять узлами cocos2d, как обычно, через директор.

Отсюда остается лишь создать UIPickerView и добавить его в окно. Настройка UIPickerView - это отдельная задача ... У Nitrex88 есть хорошее видео на эту тему . Кроме того, проверьте UICatalog, чтобы получить надежный пример не только UIPickerView, но и многих других подклассов UIView.

Вот пример добавления тривиального UIPicker в приложение cocos2d:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "cocos2d.h"

@interface AppDelegate {
    UIWindow *window;
    NSArray *pickerValues;
}
@property (nonatomic, retain) UIWindow window;
@property (nonatomic, retain) NSArray *pickerValues;
@end


@implementation AppDelegate
@synthesize window, pickerValues;

-(void)applicationDidFinishLaunching:(UIApplication *)application {

    // Create Window
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [window setUserInteractionEnabled:YES];
    [window setMultipleTouchEnabled:YES];

    // Set up Director and attach to window
    [[Director sharedDirector] attachInWindow:window];
    [[Director sharedDirector] setLandscape:YES];
    [[Director sharedDirector] runWithScene:[MyScene node]];

    // Create one large view and rotate the coordinates to landscape
    UIView *parentView = [[UIView alloc] initWithFrame:CGRectMake(0.0f,0.0f,480.0f, 320.0f)];
    parentView.transform = CGAffineTransformIdentity;
    parentView.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    parentView.bounds = CGRectMake(0.0f, 0.0f, 480.0f, 320.0f);

    // Initialize picker and its data source
    pickerValues = [[NSArray alloc] initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",nil];
    UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0f, 195.0f, 320.0f, 125.0f)];
    [pickerView setDelegate:self];

    // Attach picker to parent view and parent view to window
    [parentView addSubview:pickerView];
    [window addSubview:parentView]; 
    [window makeKeyAndVisible];
}

- (void) dealloc {
    [window release];
    [pickerValues release];
    [super dealloc];
}

// ====================
// UIPicker Callbacks
// ====================

// Fire when new picker values are selected
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    NSString *numberSequence = [NSString stringWithFormat:@"Sequence: %@%@%@",
                                [pickerValues objectAtIndex:[thePickerView selectedRowInComponent:0]],
                                [pickerValues objectAtIndex:[thePickerView selectedRowInComponent:1]],
                                [pickerValues objectAtIndex:[thePickerView selectedRowInComponent:2]]];

    NSLog(numberSequence);
}


// Number of picker wheels in the picker
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView                          {
    return 3;
}

// Number of items in each picker wheel
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return [pickerValues count];
}


// Title for Row #
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return [pickerValues objectAtIndex:row]; 
}


// Row height in pixels
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
    return 40.0;
}

// Column width in pixels
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
    return 90.0f;
}
// ====================

@end