关于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


.mm文件

//

//  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-----------------


// 欢迎大家斧正。



1 0