Я использую 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;
}