2010-01-02 4 views
3

Раньше я использовал метод старой школы добавления наложения на экран камеры, и это сработало нормально. Однако, поскольку 3.1 вышел, Apple настаивает на том, что я использую API для добавления наложения. Я быстро получил оверлей для работы, но кажется, что, если я использую пользовательский оверлей, тогда перемещение экрана & не реагирует, я могу использовать или возвращать, не может реально изменить размер & двигаться. Код, который я использую, приведен ниже. Я пробовал несколько вариантов, но единственное, что на самом деле позволяет переместить & изменить размер, это удалить строку, которая добавляет пользовательский вид наложения.Image Move & Resize не работает при использовании пользовательского наложения камеры iPhone SDK 3.1+

Любые идеи?

UIImage *image = [UIImage imageNamed:@"camera-template-long.png"]; 
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] ; 
imgView.image = image; 

UIView *overlayView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
overlayView.opaque = NO; 
[overlayView addSubview:imgView]; 

UIImagePickerController* picker = [[UIImagePickerController alloc] init]; 
picker.sourceType = UIImagePickerControllerSourceTypeCamera;   
picker.showsCameraControls = YES; 
picker.cameraOverlayView = overlayView; 
picker.delegate = self; 
picker.allowsEditing = YES; 

[self presentModalViewController:picker animated:YES]; 

ответ

3

Вся проблема уходит, как только вы используете [overlayView setUserInteractionEnabled:NO];, чтобы остановить представление оверлей от обработки ввода.

+0

то зачем нужно накладывать? я попытался сделать то, что было предложено выше, после этого наложение не появится. – tom

+0

Мне нужен только оверлей, чтобы отобразить рамку над просмотром камеры в реальном времени. Мне не нужно какое-либо взаимодействие с пользователем в моем наложении. –

3

Установите оба allowsEditing/showsCameraControls свойства NO, подготовить первоначальный вид на cameraOverlayView и использовать takePicture метод.

Затем imagePickerController:didFinishPickingMediaWithInfo: будет называться непосредственно.


Пожалуйста, попробуйте следующий код:

- (void)foo { 
    UIImagePickerController *controller = [[[UIImagePickerController alloc] init] autorelease]; 
    controller.sourceType = UIImagePickerControllerSourceTypeCamera; 
    controller.cameraOverlayView = self.cameraOverlay; 
    [self performSelector:@selector(moveOverlayViewToSublayer:) withObject:controller afterDelay:0.1f]; 
    controller.delegate = self; 
    [self presentModalViewController:controller animated:YES]; 
} 
- (void) moveOverlayViewToSublayer:(UIImagePickerController*)controller { 
    CALayer *aLayer = self.cameraOverlay.layer.superlayer; 
    controller.cameraOverlayView = nil; 
    [aLayer addSublayer:self.cameraOverlay.layer]; 
} 

Я надеюсь, что это будет хорошо работать.

+0

Это все еще позволяет изменять размер и перемещение? –

+0

Извините, я неправильно понял ваш вопрос. Ваш вопрос: «Как активировать операцию изменения размера и обрезки при добавлении пользовательского наложения?», Не так ли? Я изменил свой ответ. – KatokichiSoft

+1

Это сработало, с небольшим изменением, мне нужно было сохранить оба разрешенияEditing и showCameraControls установить YES. Благодарю. Теперь посмотрим, одобрит ли Apple это. Я получаю предупреждение о недопустимости CALayer addSublayer. –