Quick-cocos2d-x3.3 ios实现头像选取

地址:http://my.oschina.net/u/1582495/blog/390417

1、在ios/AppController.h 添加这两个协议 UIImagePickerControllerDelegate,UINavigationControllerDelegate
2、编写下面代码
//显示照相机
+(void) showImagePicker:(NSDictionary *)info {
callBackId = intValue];
UIImagePickerController *imagePicker = init];
imagePicker.delegate = self;
imagePicker.allowsEditing = true;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
.keyWindow.rootViewController presentViewController:imagePicker animated:YES completion:nil];
}

//选取照片完成
+(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSLog(@"%@",info);
if ( isEqualToString:@“public.image”]) {
UIImage *img = ;
;
} else {

}
 
;

}

// 取消选择
+(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
;
}

//保存图片
+(void)saveImage:(UIImage *)img
{
BOOL success;
NSFileManager *fileManager = ;
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = ;
NSString *imgFilePath = ;
success = ;
std::string newImgPath = cocos2d::CCFileUtils::getInstance()->getWritablePath() + “/headPhoto.png”;
if (success) {
success = error:&error];
NSLog(@“success 2 %d”,success);
}
// 更改尺寸
UIImage * smallImage = ;
atomically:YES];
// 新的照片地址回调给lua
cocos2d::LuaObjcBridge::pushLuaFunctionById(callBackId);
// cocos2d::LuaObjcBridge::getStack()->pushString();
cocos2d::LuaObjcBridge::getStack()->pushString(newImgPath.c_str());
cocos2d::LuaObjcBridge::getStack()->executeFunction(1);
cocos2d::LuaObjcBridge::releaseLuaFunctionById(callBackId);

}
// 实现缩略图
+(UIImage *) thumbnailWithImageWithoutScale:(UIImage *)img size:(CGSize)asize
{
UIImage * newImg;
if (nil == img) {
newImg = nil;
}else{
CGSize oldsize = img.size;
CGRect rect;
if(asize.width/asize.height > oldsize.width/oldsize.height){
rect.size.width = asize.height * oldsize.width / oldsize.height;
rect.size.height = asize.width;
rect.origin.x = (asize.width - rect.size.width) / 2;
rect.origin.y = 0;
}else{
rect.size.width = asize.width;
rect.size.height = asize.width * oldsize.height / oldsize.width;
rect.origin.x = 0;
rect.origin.y = (asize.height - rect.size.height) / 2;
}
UIGraphicsBeginImageContext(asize);
CGContextRef content = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(content, CGColor]);
UIRectFill(CGRectMake(0, 0, asize.width, asize.height));

![](;
newImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
return newImg;
}
3、在lua里面实现:
if device.platform == “ios” then
local function callBack( imgFileName )
//重新加载文理
cc.Director:getInstance():getTextureCache():reloadTexture(imgFileName)
display.newSprite(imgFileName):addTo(self):pos(display.cx,display.cy)
end
luaoc.callStaticMethod(“AppController”,“showImagePicker”,{listener = callBack})
end)

callBackId这个怎么定义的

很有用。感谢楼主分享。。。