objective-c - UIImagePickerController 只工作一次

标签 objective-c ios cocos2d-iphone

我正在使用 UIImagePickerController 让用户在我的 Cocos2D 游戏中选择背景。它在您第一次使用时有效,但如果您尝试再次更改背景,选择器将显示,但当您选择图像时,背景将保持不变。

这是我的代码:

- (void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    NSArray *TouchesA = touches.allObjects;

    for (int i = 0; i < TouchesA.count; i++) {


        CGPoint touchLocation = [self convertTouchToNodeSpace:[TouchesA objectAtIndex:i]];

        CGRect rect = CGRectMake(touchLocation.x, touchLocation.y, 1, 1);

        if(CGRectIntersectsRect(rect, infoButton.boundingBox))
        {
            [self pickPhoto:UIImagePickerControllerSourceTypeSavedPhotosAlbum];
        }
    }
}

-(void)pickPhoto:(UIImagePickerControllerSourceType)sourceType{

    UIImagePickerController *picker = [[UIImagePickerController alloc]init];
    picker.delegate = self;
    picker.sourceType = sourceType;
    //picker.wantsFullScreenLayout = YES;
    //[picker presentModalViewController:picker animated:YES];

    [[[CCDirector sharedDirector] openGLView] addSubview:picker.view];

}

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{

    [picker dismissModalViewControllerAnimated:YES];
    [picker.view removeFromSuperview];
    [picker release];
}

-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info{

    newImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

    [picker dismissModalViewControllerAnimated:YES];
    [picker.view removeFromSuperview];
    [picker release];



    CCSprite *imageFromPicker = [CCSprite spriteWithCGImage:newImage.CGImage key:@"ImageFromPicker"];

    Background = imageFromPicker;

    int SSw = [CCDirector sharedDirector].winSize.width;
    int SSh = [CCDirector sharedDirector].winSize.height;

    Background.position = ccp(SSw/2, SSh/2);

    Background.scaleX = SSw / Background.textureRect.size.width;
    Background.scaleY = SSh / Background.textureRect.size.height;

    [[self children] removeObjectAtIndex: 0];
    [[self children] insertObject:Background atIndex:0];


}

我该如何解决这个问题?

编辑:

@interface HelloWorldLayer : CCLayer <UIImagePickerControllerDelegate, 

UINavigationControllerDelegate>
{
    CCSprite *infoButton;
    CCSprite *Background;
    UIImage *newImage;
}



-(id) init
{
    if( (self=[super init])) {

        self.isTouchEnabled = true;
        [[CCDirector sharedDirector].openGLView setMultipleTouchEnabled:YES];


        int SSw = [CCDirector sharedDirector].winSize.width;
        int SSh = [CCDirector sharedDirector].winSize.height;

        Background = [CCSprite spriteWithFile:@"B.jpg"];    

        Background.position = ccp(SSw/2, SSh/2);

        Background.scaleX = SSw / Background.textureRect.size.width;
        Background.scaleY = SSh / Background.textureRect.size.height;



        infoButton = [CCSprite spriteWithFile:@"info.png"];
        infoButton.position = ccp(SSw - 15, 15);

        [self addChild:Background];
        [self addChild:infoButton];

        [self schedule:@selector(nextFrame:)];

    }
    return self;
}

最佳答案

我也遇到了同样的问题

检查这一行:

CCSprite *imageFromPicker = [CCSprite spriteWithCGImage:newImage.CGImage key:@"ImageFromPicker"];

并尝试将其替换为:

// resize image
UIImage* image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

// add current shot
CCTexture2D *texture2D = [[[CCTexture2D alloc] initWithImage:image] autorelease]; // this is new
CCSprite *sprite = [CCSprite spriteWithTexture:texture2D]; // this is new

也看这里: http://www.cocos2d-iphone.org/forum/topic/30259?replies=8#post-149117

希望这对您有所帮助。

关于objective-c - UIImagePickerController 只工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8904355/

相关文章:

iphone - 在编译时识别 iDevices,最佳实践

ios - 转到 pdf 文件的特定页面

ios - 结合 Cocos2d 和 GLKView 渲染相同的数据

ios - 我怎样才能找到谁是类(class)的家长?

iphone - 递增属性 int (self.int++)

objective-c - 属性与实例变量

objective-c - 如何打印字体的字符集?

ios - UIImages 在 xcode 中丢失尺寸并变大

ios - 如何解决 CFData (store) 内存增加?

ios - 如何在cocos2d中填充纹理?