在我的應用程序的一個位置,我需要使用相機,所以我打電話給UIImagePickerController
。不幸的是,一旦我從控制器返回,應用程序中的大部分圖片都是全尺寸的,不管它們的屬性如何。在UITableViewCell
s中似乎是UIImageView
s。這適用於應用中的所有視圖,而不僅僅是那些直接連接到視圖控制器的視圖,該視圖控制器稱爲UIImagePickerController
。有一次,當我亂搞,試圖排除故障時,問題似乎自行消失,儘管我無法複製該問題。UIImagePickerController強制其他視圖中的圖像爲全尺寸
代碼如下。
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
UIAlertView *errorAlertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Device has no camera"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[errorAlertView show];
[_app.navController popPage];
}
else if(firstTime){
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
firstTime = false;
[self presentViewController:picker animated:YES completion:NULL];
}
}
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *cameraImage = info[UIImagePickerControllerEditedImage];
[picker dismissViewControllerAnimated:YES completion:NULL];
NSString *folderName = @"redApp";
if([_page hasChild:[RWPAGE FOLDER]]){
folderName = [_page getStringFromNode:[RWPAGE FOLDER]];
}
NSDate *datetimeNow = [[NSDate alloc] init];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd_HH-mm-ss-SSS"];
NSString *filename = [NSString stringWithFormat:@"%@.png",[dateFormatter stringFromDate:datetimeNow]];
NSString *applicationDocumentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *folderPath = [applicationDocumentsDir stringByAppendingPathComponent:folderName];
NSString *filePath = [folderPath stringByAppendingPathComponent:filename];
NSError *error = nil;
if(![[NSFileManager defaultManager] fileExistsAtPath:folderPath isDirectory:nil]){
[[NSFileManager defaultManager] createDirectoryAtPath:folderPath withIntermediateDirectories:NO
attributes:nil error:&error];
}
if(error != nil){
NSLog(@"Create directory error: %@", error);
}
[UIImagePNGRepresentation(cameraImage) writeToFile:filePath options:NSDataWritingAtomic error:&error];
if(error != nil){
NSLog(@"Error in saving image to disk. Error : %@", error);
}
RWXmlNode *nextPage = [_xml getPage:[_page getStringFromNode:[RWPAGE CHILD]]];
nextPage = [nextPage deepClone];
[nextPage addNodeWithName:[RWPAGE FILEPATH] value:filePath];
[_app.navController pushViewWithPage:nextPage];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissViewControllerAnimated:YES completion:NULL];
[_app.navController popPage];
}
編輯: 要在上面展開。
該應用程序的基礎是一個自定義容器視圖控制器,其行爲主要像一個導航控制器。當用戶導航到頁面(我稱之爲視圖和視圖控制器的組合)時,它將顯示在「自定義容器」視圖中,並且上一頁將存儲在堆棧中。
我的一個頁面調用UIImagePicker。一旦圖像選擇器再次關閉,我又回到應用程序,當我打開新頁面時,整個應用程序出現問題。我沒有在每個頁面上看到問題,但他們在幾個獨立的頁面上。大多數頁面完全不受影響,而問題頁面似乎不遵守它們的限制。
如果您想重新調整圖像大小,請關注[此鏈接] [1]。 [1]:http://stackoverflow.com/a/6573100/2869784 –
我不知道你這個問題。但你有沒有嘗試過使用[UIImageView setContentMode:UIViewContentModeScaleAspectFill];如果我很清楚,我認爲你的xib中有一個UIImageView,即使它在打開圖像時具有一定的大小,它也會在全屏模式下打開?不使用你的UIImageView框架大小?如果是的話嘗試使用你的UIImageView的內容模式,並檢查它是不是自動調整大小。 – artud2000
我有多個不同的頁面/視圖,每個都有自己的xib和視圖控制器。這個問題在應用程序中延伸。這些圖片都在xib中設置了其內容模式(主要是Aspect Fill),並且正常工作直到我調用UIImagePicker。我剛剛在viewWillAppear中的一個視圖中設置了內容模式,現在圖像的大小合適,但視圖的其餘部分被搞砸了,我的標題TextView已經消失,屏幕上我的主體TextView也擴展了兩側。無論是約束都搞砸了,還是父視圖的大小。 – Rubberduck