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];
}