2013-03-04 107 views
0

我有一個cocos2d應用程序,它需要菜單中的UIImagePickerController。在iPad上,代碼運行平穩,但是在iPhone上,當UIImagePickerController在屏幕上時會有巨大的性能損失 - 您需要按住按鈕超過2秒才能註冊爲輕敲。任何提高響應時間的性能提示?在創建UIImagePickerController之前,我已經在CCDirector上調用'pause'和'stopAnimation'。UIImagePickerController在cocos2d中速度極慢iOS

- (void)dismissViewControllerIfRequired { 
    if(_viewController != nil) { 
     [_viewController removeFromParentViewController]; 
     _viewController = nil; 
    } 
} 

- (void)dismissPickerIfRequiredAndAnimate:(BOOL)animated { 
    if (_picker != nil) { 
     [_picker dismissModalViewControllerAnimated:animated]; 
     [_picker.view removeFromSuperview]; 
     _picker = nil; 

     [[CCDirector sharedDirector] startAnimation]; 
     [[CCDirector sharedDirector] resume]; 
    } 
} 

- (void)dismissPopoverIfRequiredAndAnimate:(BOOL)animated { 
    if (_popover != nil) { 
     [_popover dismissPopoverAnimated:animated]; 
     _popover = nil; 
    } 
} 

- (void)showPhotoLibrary { 
    [self dismissPickerIfRequiredAndAnimate:NO]; 
    [self dismissViewControllerIfRequired]; 
    [self dismissPopoverIfRequiredAndAnimate:NO]; 

    CCDirector * director = [CCDirector sharedDirector]; 
    [director pause]; 
    [director stopAnimation]; 

    _picker = [[UIImagePickerController alloc] init]; 
    _picker.delegate = self; 
    _picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    _picker.wantsFullScreenLayout = YES; 
    _picker.view.userInteractionEnabled = YES; 

    if([CCDirector sharedDirector].currentDeviceIsIPad) { 
     _popover = [[UIPopoverController alloc] initWithContentViewController:_picker]; 
     [_popover setDelegate:self]; 

     CGSize winsize = [[CCDirector sharedDirector] winSize]; 
     [_popover setPopoverContentSize:CGSizeMake(320, winsize.height) animated:NO]; 

     CGRect r = CGRectMake(20,20,10,10); 
     r.origin = [[CCDirector sharedDirector] convertToGL:r.origin]; 
     [_popover presentPopoverFromRect:r inView:[CCDirector sharedDirector].view permittedArrowDirections:UIPopoverArrowDirectionDown animated:NO]; 
    } else { 

     _viewController = [[UIViewController alloc] init]; 
     _viewController.view.userInteractionEnabled = YES; 
     [director.view addSubview:_viewController.view]; 
     [_viewController presentModalViewController:_picker animated:NO]; 
    } 

} 

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { 
    [self dismissPickerIfRequiredAndAnimate:YES]; 
    [self dismissViewControllerIfRequired]; 
    [self dismissPopoverIfRequiredAndAnimate:YES]; 
} 


- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { 
    [self dismissPickerIfRequiredAndAnimate:YES]; 
    [self dismissViewControllerIfRequired]; 
} 



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

    UIImage * pickedImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

    if(pickedImage == nil) { 
     printf("picked image was nil...\n"); 
    } else { 
     printf("picked image size: %f, %f\n", pickedImage.size.width, pickedImage.size.height); 
    } 

    [self dismissPickerIfRequiredAndAnimate:YES]; 
    [self dismissPopoverIfRequiredAndAnimate:YES]; 
} 

回答

0

我通過隱藏,當它完全由UIKit的視圖( - 不僅限iPad在我的情況需要在iPhone上)隱藏在CCDirector查看固定的性能問題。類似這樣的:

+ (void)hideDirector { 
    CCDirector * director = [CCDirector sharedDirector]; 

    if(!director.view.hidden) { 
     [director purgeCachedData]; //optional 
     [director pause]; 
     [director stopAnimation]; 

     [director.view setHidden:YES]; 
    } 
} 


+ (void)showDirector { 
    CCDirector * director = [CCDirector sharedDirector]; 

    if(director.view.hidden) { 
     [director.view setHidden:NO]; 

     [director stopAnimation]; 
     [director resume]; 
     [director startAnimation]; 
    } 
}