iOS 對iphone和 ipad的網路攝影機和圖片庫的區別處理代碼

來源:互聯網
上載者:User

     iPhone跟 iPad對網路攝影機和圖片庫的代碼處理有點不一樣,iPad主要是用使用

UIPopoverController來包含 UIImagePickerController.

   主要的代碼如下:

   1. 類從UIViewController繼承,然后里面實現  UINavigationControllerDelegate跟 

UIImagePickerControllerDelegate。

   2.  將ios的appDelegate類  的laungh函數中,將相應的代碼修改為:

    // Set RootViewController to window    if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)    {        // warning: addSubView doesn't work on iOS6         [window setRootViewController:viewController];        [window addSubview: viewController.view];    }    else    {        // use this method on ios6        [window setRootViewController:viewController];    }

    主要目的是 當SDK< 6.0的時候,也設定  

[window setRootViewController:viewController];
   防止在後面取window.rootViewController的時候crash.

   3. *.h檔案裡麵包含這麼幾個成員變數:

    

    UIImagePickerController* picker_camera_;    UIImagePickerController* picker_library_;    UIWindow * window;    UIPopoverController  * pc_image_picker_;

   4. *.mm檔案的內容如下:

@implementation IPHONEAvatarstatic IPHONEAvatar* _sharedIPHONEAvatar = nil;static int _g_iImgIndex = 0;+(IPHONEAvatar*)sharedIPHONEAvatar {    @synchronized([IPHONEAvatar class])    {        if(!_sharedIPHONEAvatar)        {            [[self alloc] init];        }                    return _sharedIPHONEAvatar;    }    return nil;}+(id)alloc{    @synchronized ([IPHONEAvatar class])    {        NSAssert(_sharedIPHONEAvatar == nil,                 @"Attempted to allocated a second instance of the IPHONEAvatar singleton");        _sharedIPHONEAvatar = [super alloc];        return _sharedIPHONEAvatar;    }    return nil;}- (void)imagePickerController:(UIImagePickerController*)pickerdidFinishPickingImage:(UIImage*)imageeditingInfo:(NSDictionary*)editingInfo{NSMutableDictionary * dict= [NSMutableDictionary dictionaryWithDictionary:editingInfo];[dict setObject:image forKey:@"UIImagePickerControllerEditedImage"];[self imagePickerController:picker didFinishPickingMediaWithInfo:dict];}-(void)image:(UIImage*)image didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo{    UNUSED(image);    UNUSED(contextInfo);if (error) {        CCLOG("saving pic error!");}}- (void)imagePickerControllerDidCancel:(UIImagePickerController*)picker{    [picker.view removeFromSuperview];    [picker dismissModalViewControllerAnimated:YES];    [picker release];    picker = nil;    picker_camera_ = nil;    picker_library_ = nil;    if(window)    {        [window removeFromSuperview];        [window release];        window = nil;    }    #ifdef   HD_EDITION    if (pc_image_picker_)    {        [pc_image_picker_  dismissPopoverAnimated:YES];                pc_image_picker_ = nil;    }#else       #endif    }//3.x  使用者選中圖片後的回調- (void)imagePickerController:(UIImagePickerController*)pickerdidFinishPickingMediaWithInfo:(NSDictionary*)info{    CCLOG("imagePickerController:");if (picker == picker_camera_) {//如果是 來自照相機的image,那麼先儲存UIImage* original_image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];UIImageWriteToSavedPhotosAlbum(original_image, self,   @selector(image:didFinishSavingWithError:contextInfo:),   nil);}UIImage* image = [info objectForKey: @"UIImagePickerControllerEditedImage"];NSError** error = 0;NSFileManager* fm = [NSFileManager defaultManager];NSString* my_avatar_temp_path = [NSString stringWithFormat: @"%@/Documents/MYAVATAR_TEMP%d.PNG", NSHomeDirectory(),_g_iImgIndex++];if ([fm fileExistsAtPath:my_avatar_temp_path]) {[fm removeItemAtPath:my_avatar_temp_path error:error];}//UIImage* avatar_image = [ImageHelper image:image fillView:avatar_];            UIImage* avatar_image= nil;#ifdef   HD_EDITION    avatar_image = [ImageHelper image:image fillSize:CGSizeMake(120.0f, 120.0f)];#else    avatar_image = [ImageHelper image:image fillSize:CGSizeMake(120.0f, 120.0f)];#endif    NSData* imageData = UIImagePNGRepresentation(avatar_image);    BOOL avatar_updated = NO;if (imageData) {BOOL bSuccess = [imageData writeToFile:my_avatar_temp_path atomically:YES];if (bSuccess)        {            CCString strAvatarPath;            strAvatarPath.initWithFormat("%s",[my_avatar_temp_path UTF8String]);            CCLog("strAvatarPath: %s",strAvatarPath.getCString());            CCNotificationCenter::sharedNotificationCenter()->postNotification(AVATARCHANGE,&strAvatarPath);}        else        {CCLog("Failed to save picture");}avatar_updated = bSuccess;}    [picker.view removeFromSuperview];    [picker dismissModalViewControllerAnimated:YES];    [picker release];    picker = nil;    picker_camera_ = nil;    picker_library_ = nil;        if (window)    {        [window removeFromSuperview];        [window release];        window = nil;    }#ifdef   HD_EDITION    if (pc_image_picker_)    {        [pc_image_picker_  dismissPopoverAnimated:YES];                pc_image_picker_ = nil;    }#else        #endif        // upload new avatar to server    if (avatar_updated)    {        std::string avatar_hash = getImageFileHashValue([my_avatar_temp_path UTF8String]) + ".png";        NSString* my_avatar_path = [NSString stringWithFormat:@"%@/Documents/%s", NSHomeDirectory(), avatar_hash.c_str()];if ([fm fileExistsAtPath:my_avatar_path])        {[fm removeItemAtPath:my_avatar_path error:error];}[fm moveItemAtPath: my_avatar_temp_pathtoPath: my_avatar_path error: error];        CCString strFileName;        strFileName.initWithFormat("%s",[my_avatar_path UTF8String]);                        std::string   strUploading = LanguageManager::sharedLanguageManager()->getLocalizedString("uploading avatar,please waiting...");                UIAlertView *    baseAlert = [[[UIAlertView alloc] initWithTitle:[NSString  stringWithUTF8String:strUploading.c_str()] message:nil                                               delegate:self cancelButtonTitle:nil otherButtonTitles:nil] autorelease];                [baseAlert show];                        std::string  strOk =  LanguageManager::sharedLanguageManager()->getLocalizedString("OK");                        if (AvatarManager::sharedAvatarManager()->uploadFile(strFileName) )        {              [baseAlert   dismissWithClickedButtonIndex:0 animated:YES];                        std::string   strUploadSuccess = LanguageManager::sharedLanguageManager()->getLocalizedString("upload avatar  success!");                        UIAlertView* av = [[[UIAlertView alloc] initWithTitle:@"tip" message:[NSString  stringWithUTF8String:strUploadSuccess.c_str()] delegate:self cancelButtonTitle:[NSString stringWithUTF8String:strOk.c_str()] otherButtonTitles:nil] autorelease];                        [av show];        }        else        {            [baseAlert   dismissWithClickedButtonIndex:0 animated:YES];                        std::string   strUploadFailed = LanguageManager::sharedLanguageManager()->getLocalizedString("upload avatar  failed!");                        UIAlertView* av = [[[UIAlertView alloc] initWithTitle:@"tip" message:[NSString  stringWithUTF8String:strUploadFailed.c_str()] delegate:self cancelButtonTitle: [NSString stringWithUTF8String:strOk.c_str()] otherButtonTitles:nil] autorelease];                        [av show];            AnalyticX::flurryLogError(FLURRY_UPLOAD_AVATAR, "UPLOAD_AVATAR_FAILED");        }    }    }-(void)onIPHONECamera{    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {        picker_camera_ = [[UIImagePickerController alloc] init];#ifdef   HD_EDITION                picker_camera_.sourceType = UIImagePickerControllerSourceTypeCamera;        if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront])        {            picker_camera_.cameraDevice = UIImagePickerControllerCameraDeviceFront;        }        else        {            picker_camera_.cameraDevice = UIImagePickerControllerCameraDeviceRear;        }        picker_camera_.allowsEditing = YES;        picker_camera_.delegate = self;       #else            picker_camera_.sourceType = UIImagePickerControllerSourceTypeCamera;        if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront])        {            picker_camera_.cameraDevice = UIImagePickerControllerCameraDeviceFront;        }        else        {            picker_camera_.cameraDevice = UIImagePickerControllerCameraDeviceRear;        }        picker_camera_.allowsEditing = YES;        picker_camera_.delegate = self;        #endif                             #ifdef   HD_EDITION        picker_camera_.view.frame = [UIScreen mainScreen].bounds;        window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];        window.rootViewController = picker_camera_;//self;        if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)        {            // warning: addSubView doesn't work on iOS6            [window addSubview: picker_camera_.view];        }        else        {            // use this method on ios6            [window setRootViewController:picker_camera_];//self];        }                [window makeKeyAndVisible];#else        picker_camera_.view.frame = [UIScreen mainScreen].bounds;        window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];        window.rootViewController = picker_camera_;//self;        if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)        {            // warning: addSubView doesn't work on iOS6            [window addSubview: picker_camera_.view];        }        else        {            // use this method on ios6            [window setRootViewController:picker_camera_];//self];        }                [window makeKeyAndVisible];#endif    }    else    {        //提示網路攝影機無法用    }}-(void)onIPHONEAlbum{    picker_library_ = [[UIImagePickerController alloc] init];#ifdef HD_EDITION    picker_library_.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;    picker_library_.allowsEditing = YES;    picker_library_.delegate = self;    #else    picker_library_.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;    picker_library_.allowsEditing = YES;    picker_library_.delegate = self;    #endif             #ifdef HD_EDITION    CGSize  libSize  =  picker_library_.view.frame.size;        //libSize = CGSizeMake(160/2, 160/2);    pc_image_picker_ = [[UIPopoverController alloc] initWithContentViewController:picker_library_];        if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)    {        CCLog("systemVersion<6.0");    }    else    {        CCLog("systemVersion>=6.0");    }           [pc_image_picker_ presentPopoverFromRect:CGRectMake(57/2, 352/2, libSize.width, libSize.height) inView:[[UIApplication sharedApplication] keyWindow].rootViewController.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];#else    [[[UIApplication sharedApplication] keyWindow] addSubview:picker_library_.view];#endif}@end

具體細節就不說了,主要是區分iPhone和iPad,然後區分 SDK6.0以上跟 6.0以下。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.