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