iOS 相機調用 – iPhone手機開發技術文章 iPhone軟體開發教學課程

調用相機需要引入兩個代理

UIImagePickerControllerDelegate,UINavigationControllerDelegate

否則出出現:

設置delegate時候,出現警告:Assigning to ‘id’ from incompatible type ‘AddSightingViewController *const __strong’

解決過程】

1.問題很明顯是 strong不兼容,然後就去試試,把相應的AddSightingViewController改一下,從

@property (nonatomic)
UIImagePickerController *imgPickerController;

改為:

@property (nonatomic,
weak) UIImagePickerController *imgPickerController;

然後就消除瞭此警告瞭。

註:有時候Xcode不能及時消除警告和錯誤,需要手動去Product->Clean一下。

【總結】

好像Property變量,如果不指定引用類型,則默認是strong引用,此處改為weak,即可解除此警告。

而另外關於weak,strong等更詳細的含義,有空再整理。

//相機

-(void)takePhotoAction:(UIButton *)sender{

FZLog(nil,
nil);

//先設定sourceType為相機,然後判斷相機是否可用(ipod)沒相機,不可用將sourceType設定為相片庫

if ([UIImagePickerController
isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) {

UIImagePickerController *picker = [[UIImagePickerController
alloc]
init];//初始化

picker.delegate =
self;

picker.allowsEditing =
YES;//設置可編輯

/*sourceType = UIImagePickerControllerSourceTypeCamera; //照相機

sourceType = UIImagePickerControllerSourceTypePhotoLibrary; //圖片庫

sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; //保存的相片

*/

picker.sourceType =
UIImagePickerControllerSourceTypeCamera;

[self
presentViewController:picker animated:YES
completion:nil];//進入照相界面

}

}

// 打開相冊:(區分pad和iphone)

-(void)openPhotosAction:(UIButton *)sender{

// for iphone:

UIImagePickerController *pickerImage = [[UIImagePickerController
alloc]
init];

if([UIImagePickerController
isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

pickerImage.sourceType =
UIImagePickerControllerSourceTypePhotoLibrary;

//pickerImage.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

pickerImage.mediaTypes = [UIImagePickerController
availableMediaTypesForSourceType:pickerImage.sourceType];

}

pickerImage.delegate =
self;

pickerImage.allowsEditing =
NO;

[self
presentViewController:pickerImage animated:YES
completion:nil];//進入照相界面

}

//for ipad:

-(void)ipadPicker{

UIImagePickerControllerSourceType sourceType =
UIImagePickerControllerSourceTypePhotoLibrary;

//sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; //保存的相片

UIImagePickerController *picker = [[UIImagePickerController
alloc]
init];

picker.delegate =
self;

picker.allowsEditing =
NO;//是否允許編輯

picker.sourceType = sourceType;

/*

如果從一個導航按鈕處呈現,使用:

presentPopoverFromBarButtonItem:permittedArrowDirections:animated:;

如果要從一個視圖出呈現,使用:

presentPopoverFromRect:inView:permittedArrowDirections:animated:

如果設備旋轉以後,位置定位錯誤需要在父視圖控制器的下面方法裡面重新定位:

didRotateFromInterfaceOrientation:(在這個方法體裡面重新設置rect)

然後再次調用:

– (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated

*/

//UIPopoverController隻能在ipad設備上面使用;作用是用於顯示臨時內容,特點是總是顯示在當前視圖最前端,當單擊界面的其他地方時自動消失。

UIPopoverController *popover = [[UIPopoverController
alloc]initWithContentViewController:picker];

//permittedArrowDirections
設置箭頭方向

[popover presentPopoverFromRect:CGRectMake(0,
0, 300,
300)
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];

}

調用相機自定義《中文顯示,相機全屏》

中文相機

在Iphone利用UIImagePickerController調用系統照相機一文中介紹瞭怎樣調用系統照相機。但是有時候我需要自定義相機內容,需要以相機內容為背景,在其視圖上添加其他控件,下面是相機試圖最大化的實例。

-(void)onClickbutton:(id)sender

{

UIImagePickerController *controller = [[UIImagePickerController
alloc]
init];

[controller setSourceType:UIImagePickerControllerSourceTypeCamera];

[controller
setShowsCameraControls:NO];

CGAffineTransform cameraTransform =
CGAffineTransformMakeScale(1.25,1.25);

controller.cameraViewTransform = cameraTransform;

[self
presentViewController:controller animated:YES
completion:nil];//進入照相界面

}

targets->custom iOS target properties (Localization native development region設為China)

發佈留言