При повторном использовании камеры может произойти сбой приложения? - PullRequest
0 голосов
/ 15 июня 2010

У меня есть приложение, которое создает слайд-шоу из изображений пользователей. Они могут взять из своей библиотеки или сфотографировать. Я обнаружил, что повторное использование захвата изображения из библиотеки хорошо. Но многократное использование снимка вызывает хаотичное поведение. Я получаю сбои, но в основном происходит перезагрузка представления после «didFinishPickingMediaWithInfo», которое портит все.

У меня нет утечек, и, кажется, после каждого снимка он срабатывает правильно. Я изменяю размер изображения и сохраняю его в базе данных. Кто-нибудь еще сталкивается с этой ситуацией? Разве камера не предназначена для того, чтобы ее так часто называли?

1 Ответ

0 голосов
/ 15 июня 2010

Извините за путаницу.Это не непрерывный процесс, это снимок, снятие и отпускание камеры, затем пользователь выбирает вариант A, B или C (им все время предлагается сделать выбор по многим вещам), затем они могут сделать еще один снимок, снять и отпустить камеру.... и т.д. ... и это происходит несколько раз, пока они завершают ввод всех данных.

После того, как они выбирают камеру, я называю этот код.Я не освобождаю средство выбора изображений в методе dealloc.

- (void)openCamera {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{

    imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    [self presentModalViewController:imagePicker animated:YES];
[imagePicker release];
}

}

После того, как они "ИСПОЛЬЗУЮТ" снимок, сделанный с камеры, я вызываю следующий код.Он изменил размер изображения в соответствии с исходным размером изображения.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

UIImage *tempCameraImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    [picker dismissModalViewControllerAnimated:YES];

    CGFloat originalSize = tempCameraImage.size.width * tempCameraImage.size.height;
    NSLog(@"Original Size %f", originalSize);
    if (originalSize > 2500000.0) {
        CGSize size = tempCameraImage.size;
        CGRect rect = CGRectMake(0.0, 0.0, .23 * size.width, .23 * size.height);
        UIGraphicsBeginImageContext(rect.size);
        [tempCameraImage drawInRect:rect];
        theImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        CGFloat totalSize = theImage.size.width * theImage.size.height;
        NSLog(@"Final Camera Size %f", totalSize);
        [self resizeImageCamera];
        return;
    }
    else {
        CGSize size = tempCameraImage.size;
        CGRect rect = CGRectMake(0.0, 0.0, .27 * size.width, .27 * size.height);
        UIGraphicsBeginImageContext(rect.size);
        [tempCameraImage drawInRect:rect];
        theImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        CGFloat totalSize = theImage.size.width * theImage.size.height;
        NSLog(@"Final Camera Size %f", totalSize);
        [self resizeImageCamera];
        return;
    }

}

-(void)resizeImageCamera {
if (editingImage1) {
    NSManagedObject *image = [NSEntityDescription insertNewObjectForEntityForName:@"Image" inManagedObjectContext:slideshow.managedObjectContext];
    slideshow.image = image;
    [image setValue:theImage forKey:@"image"];

    CGSize size = theImage.size;
    CGRect rect = CGRectMake(0.0, 0.0, .15 * size.width, .15 * size.height);
    UIGraphicsBeginImageContext(rect.size);
    [theImage drawInRect:rect];
    slideshow.thumbnailImage1 = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    [self finishCameraImage];
    return;
}

}

-(void)finishCameraImage {

if (editingImage1) {
    keyInt = @"2";
    [editedObject setValue:keyInt forKey:@"script1"];
    pictureView.alpha = 0;
    self.navigationItem.rightBarButtonItem = nil;
    editedFieldKey = @"line2Int";
    editedFieldName = NSLocalizedString(@"line2Int", @"display name for line2");
    self.title = editedFieldName;
    linePicker.hidden = NO;

}

Iпонимаю, что я много делаю с этим образом.Если я добавлю пару задержек, это поможет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...