2 つのラベルを含むカスタム オーバーレイをカメラ ビュー コントローラーに表示しようとしています。imagePickerControllerDidCancel メソッドと alertView を正常に動作させることができませんでした。システムは正しい情報を NSLog に出力していますが、私が書いたコード行は何もしていません。ユーザーが「戻る」をタップすると (alertView をキャンセルして imagePicker に戻る)、カメラは再び表示されますが、takePhoto ボタンが表示されます。および [キャンセル] ボタンにアクセスできなくなりました。それらは引き続き表示されますが、タップすることはできません。ユーザーがインデックス 1 (Leave) のボタンをクリックすると、カメラが閉じられ、ユーザーが tabBarController index:1 にある homeViewController に戻ります。さらに、カメラが最初に読み込まれると、timerLabel は正しいデータで表示されますが、すぐに消えます。私のrefreshLabelメソッドと関係があると感じていますが、どこが間違っているのかはっきりとわかりません。これらのことはどれも私にとってはうまくいきません.私はまだプログラミングの世界に非常に慣れていないので、これらの問題のいずれかを助けていただければ幸いです. ありがとう!
#import "CameraViewController.h"
#import "FriendsViewController.h"
#import <mobileCoreServices/UTCoreTypes.h>
@interface CameraViewController ()
@end
@implementation CameraViewController
@synthesize titleLabel;
@synthesize timerLabel;
- (void)viewDidLoad
{ [super viewDidLoad];
self.recipients = [[NSMutableArray alloc] init];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (self.image == nil && [self.videoFilePath length] == 0) {
self.imagePickerController = [[UIImagePickerController alloc] init];
self.imagePickerController.delegate = self;
self.imagePickerController.allowsEditing = NO;
self.imagePickerController.videoMaximumDuration = 10;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
self.imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;}
self.imagePickerController.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:self.imagePickerController.sourceType];
[self presentViewController:self.imagePickerController animated:NO completion:nil];}
[[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
self.overlayView.frame = CGRectMake(160,8,0,0);
self.imagePickerController.cameraOverlayView = self.overlayView;
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *deadline = [NSString stringWithFormat:@"%@/deadline.txt",
documentsDirectory];
NSString *name = [NSString stringWithFormat:@"%@/name.txt",
documentsDirectory];
NSError *fileError;
titleLabel.text = [NSString stringWithContentsOfFile:name
encoding:NSASCIIStringEncoding
error:&fileError];
timerLabel.text = [NSString stringWithContentsOfFile:deadline
encoding:NSASCIIStringEncoding
error:&fileError];
if(fileError.code == 0){
NSLog(@"deadline.txt was read successfully with these contents: %@,",
timerLabel.text);
NSLog(@"name.txt was read successfully with these contents: %@,",
titleLabel.text);}
[NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(refreshLabel)
userInfo:nil
repeats:YES];
}
-(void)refreshLabel;{
self.formatter = [NSDateFormatter new];
[self.formatter setDateFormat:@"dd:hh:mm:ss"];
NSDate *startDate = [self.formatter dateFromString:self.timerLabel.text];
NSDate *timeLeft = [startDate dateByAddingTimeInterval:-1];
NSTimeInterval totalCountdownInterval = -1;
NSTimeInterval elapsedTime = [timeLeft timeIntervalSinceNow];
NSTimeInterval remainingTime = totalCountdownInterval - elapsedTime;
if (remainingTime <= 0.0) {
//dismiss controller and set to homecontroller at tabBar index 1
}
self.timerLabel.text = [self.formatter stringFromDate:timeLeft];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Are you Sure?"
message:@"you can't come back"
delegate:self cancelButtonTitle:@"Back" otherButtonTitles:@"Yes", nil];
[alertView show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex==1) {
[self.imagePickerController dismissViewControllerAnimated:NO completion:nil];
[self.tabBarController setSelectedIndex:1];
NSLog(@"Leave clicked");
}
else {
[self reset];
NSLog(@"cancel clicked");
}
}
- (void)reset {
self.image = nil;
self.videoFilePath = nil;
}