Mova e redimensionar a imagem não funcionando ao usar uma sobreposição de câmera personalizada iPhone SDK 3.1+
-
22-09-2019 - |
Pergunta
Eu costumava usar o método da velha escola de adicionar uma sobreposição à tela da câmera e funcionou bem. No entanto, desde que o 3.1 saiu, a Apple está insistindo que eu uso a API para adicionar uma sobreposição. Eu rapidamente consegui funcionar a sobreposição, mas parece que, se eu usar a sobreposição personalizada, a tela de mover e redimensionamento não é responsiva, só posso usar ou retomar, não posso redimensionar e mover. O código que estou usando está abaixo. Eu tentei várias variações, mas a única coisa que realmente permite o movimento e o redimensionamento é remover a linha que adiciona a exibição de sobreposição personalizada.
Alguma ideia?
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];
Solução 2
Todo o problema desaparece quando você usar [overlayView setUserInteractionEnabled:NO];
Para impedir que a exibição de sobreposição de manusear a entrada.
Outras dicas
Defina os dois allowsEditing
/showsCameraControls
propriedades para não, prepare sua visão original para cameraOverlayView
, E use takePicture
método.
Então, imagePickerController:didFinishPickingMediaWithInfo:
será chamado diretamente.
Por favor, tente o seguinte código:
- (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];
}
Espero que funcione bem.
http://www.techques.com/question/1-10178214/cameraoverlayview-prevents-editing-with-allowsediting
Isso funciona perfeitamente para mim. Tentei desativar o UserInteractEnabled, mas em vão.