私のアプリの一箇所で、カメラを使用する必要がありますので、私はUIImagePickerController
を呼び出します。残念なことに、コントローラーから戻ってくると、そのアプリの画像の大部分は、UIImageView
属性に関係なく、フルサイズです。 UITableViewCell
には、例外はUIImageView
であるように見えます。これは、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];
}
編集: 上記の時に展開します。
アプリの基盤はカスタムコンテナビューコントローラで、主にナビゲーションコントローラのように機能します。ユーザーがページに移動すると(ビューとビューコントローラの組み合わせと呼ばれる)、カスタムコンテナビューに表示され、前のページがスタックに格納されます。
私のページの1つにUIImagePickerが必要です。イメージピッカーが再び閉じられてアプリに戻ると、新しいページを開いたときにアプリ全体に問題が表示されます。すべてのページで問題は発生しませんが、いくつかの独立したページにあります。ほとんどのページは完全に影響を受けていませんが、問題ページは制約に従わないようです。
イメージのサイズを変更する場合は、[このリンク] [1]に従ってください。 [1]:http://stackoverflow.com/a/6573100/2869784 –
私はかなりあなたの質問を得ることはありません。しかし、[UIImageView setContentMode:UIViewContentModeScaleAspectFill]を使用しようとしましたか?私が明確ならば、あなたはあなたのxibにUIImageViewを持っていると思うし、画像を開いたときに特定のサイズを持っていてもフルスクリーンモードで開くのですか?あなたのUIImageViewフレームサイズを使用せずに? UIImageViewのコンテンツモードを使用して、自動サイズ変更でないことを確認してください。 – artud2000
私は複数の異なるページ/ビューを持っており、それぞれ独自のxibとView Controllerを持っています。この問題はアプリ全体に広がっています。ピクチャのコンテンツモードはすべてxibで(主にAspect Fillに設定されています)、UIImagePickerを呼び出すまで正常に動作します。私はちょうどビューの1つでviewWillAppearのcontentmodeを設定して、今、イメージが正しいサイズを持っていますが、ビューの残りの部分が壊れてしまい、TextViewが画面外に消えてしまって、本文のTextViewが側面。制約が崩れているか、または親ビューのサイズ。 – Rubberduck