关于Unity3D(4.7和5.3.4)与IOS原生Object-C交互,调用IOS原生UIImagePickerController的问题
来源:互联网 发布:python数据分析 视频 编辑:程序博客网 时间:2024/05/24 23:15
目前正在用unity做游戏开发,需要调用IOS原生的相册系统,获取一张照片传入unity,然后在unity中对照片进行旋转,缩放等操作。因为对OC不熟悉,所以查了各种资料后发现UIImagePickerController可以实现从IOS中获取照片。终于把接口弄好了,进行测试发现,获取到照片后,在unity中竟然不支持多点触摸了,所以也无法通过两个手指对图片进行旋转、缩放等操作。
经过多方面的测试发现,问题出现在oc中add的view竟然没有清除掉。但是对于OC一点也不熟悉啊。查了多方资料发现使用removeFromSuperview移除掉Add的view,然后release掉UIImagePickerController,就可以实现清除掉添加的view,unity就可以正常多点触摸了。
但是最近更新了unity至5.3.4版本了,当然以上是在unity4.7版本下。发现ARC开启了,也就是说没法自己release掉UIImagePickerController了。又各种查询资料,发现了在添加view的同时,把control也添加上就ok了。
情况基本就是这样,但是对OC不了解,走了很多弯路,记录在这里,也许以后就贻笑大方了。下面贴出代码。
.h文件
//
// IOSAlbumCameraController.h
//
// Created by wagnyanlei
//
//
@interface IOSAlbumCameraController :UIViewController<UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>
@end
//
// IOSAlbumCameraController.mm
//
// Created by wangyanlei
//
#import "IOSAlbumCameraController.h"
@implementation IOSAlbumCameraController
- (void)viewDidLoad
{
[superviewDidLoad];
// 此处修改view的背景颜色,不然看不来多了一个view
//self.view.backgroundColor = [UIColor darkGrayColor];
// 此处在view上添加一个按钮
// UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
// [btn setFrame:CGRectMake(130, 100, 100, 100)];
// [btn setTitle:@"back" forState:UIControlStateNormal];
// [btn setBackgroundColor:[UIColor whiteColor]];
// [btn addTarget:self action:@selector(backMethod) forControlEvents:UIControlEventTouchUpInside];
// [self.view addSubview:btn];
}
- (void)showPicker:
(UIImagePickerControllerSourceType)type
allowsEditing:(BOOL)flag
{
NSLog(@"打开相册选择器!");
UIImagePickerController *picker = [[UIImagePickerControlleralloc] init];
picker.delegate =self;
picker.sourceType = type;
picker.allowsEditing = flag;
[selfpresentViewController:pickeranimated:YEScompletion:nil];
}
-(void) viewDidAppear:(BOOL)animated {
[superviewDidAppear:YES];
}
// 打开相册后选择照片时的响应方法
- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
{
NSLog(@"完成照片选择!");
// Grab the image and write it to disk
UIImage *image;
UIImage *image2;
image = [info objectForKey:UIImagePickerControllerOriginalImage];
UIGraphicsBeginImageContext(CGSizeMake(768,1024));
[image drawInRect:CGRectMake(0,0, 768,1024)];
image2 = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// 得到了image,然后用你的函数传回u3d
NSData *imgData;
if(UIImagePNGRepresentation(image2) ==nil)
{
imgData= UIImageJPEGRepresentation(image,1.0);
}
else
{
imgData= UIImagePNGRepresentation(image2);
}
NSString *_encodeImageStr = [imgDatabase64Encoding];
UnitySendMessage("IOSAlbumCamera", "PickImageCallBack_Base64", _encodeImageStr.UTF8String);
// 关闭相册
[picker dismissViewControllerAnimated:YEScompletion:nil];
}
// 打开相册后点击“取消”的响应
- (void)imagePickerControllerDidCancel:(UIImagePickerController*)picker
{
NSLog(@"关闭照片选择器!");
[picker dismissViewControllerAnimated:YEScompletion:nil];
}
@end
//------------- called by unity -----begin-----------------
#if defined (__cplusplus)
extern "C" {
#endif
// 打开相册
void _iosOpenPhotoLibrary()
{
if([UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
{
NSLog(@"初始打开!");
IOSAlbumCameraController * app = [[IOSAlbumCameraControlleralloc] init];
UIViewController *vc =UnityGetGLViewController();
// 添加ViewController
[vc addChildViewController:app];
// 添加view
[vc.viewaddSubview: app.view];
// 调用显示相册接口
[app showPicker:UIImagePickerControllerSourceTypePhotoLibraryallowsEditing:NO];
// 移除掉添加的view
[app.viewremoveFromSuperview];
}
else
{
UnitySendMessage("IOSAlbumCamera", "PickImageCallBack_Base64", (@"").UTF8String);
}
}
#if defined (__cplusplus)
}
#endif
//------------- called by unity -----end-----------------
// 欢迎大家斧正。
- 关于Unity3D(4.7和5.3.4)与IOS原生Object-C交互,调用IOS原生UIImagePickerController的问题
- Unity3D-调用IOS原生分享的实现
- 关于iOS原生和react-native的交互
- React Native和原生iOS Objective-C的交互解决方案
- iOS原生和h5的交互
- iOS 原生控件和HTML5的交互
- IOS 原生与HTML交互
- H5与iOS原生交互
- unity与iOS原生交互的代码(三)
- JS&iOS原生交互
- iOS原生APP与H5+JS交互
- iOS原生与H5页面交互
- iOS原生与H5交互开发
- iOS原生与H5双向交互总结
- iOS UIWebView原生与JS交互
- HTML和iOS的交互,点击html中按钮,ios进行原生方法调用,及ios传值到HTML
- iOS开发-------基于WKWebView的原生与JavaScript数据交互
- iOS开发UIWebView与原生网页的交互
- FragmentManager的使用注意事项
- ScrollView嵌套ListView(ViewGroup事件分发)
- 老板说做SEO只是发外链写软文的,怎么破?
- 欢迎使用CSDN-markdown编辑器
- 调一个cpld小板
- 关于Unity3D(4.7和5.3.4)与IOS原生Object-C交互,调用IOS原生UIImagePickerController的问题
- Eclipse 窗口,视图 说明
- Mysql -update - Error Code: 1175. You are using safe update mode and you tried to update a table wit
- Ext.grid.plugin.RowExpander的使用
- android list比较字符串并排序
- The Ultimate List of 300+ Computer Vision Resources
- 第八周oj3
- DevOps数据中心
- 怎么应对“手头有其他工作/工作忙,暂时做不了”的情况?