나는 C++로 만든 게임을 만들고 있는데 어느 시점에서 카메라를 사용하고 싶어합니다. 모달 뷰 컨트롤러를 제공 오브젝티브 C 클래스와이 그 인터페이스를 수행합니다콜백에서 변경 될 때 변수가 유지되지 않음
UIImagePickerController* cameraUI = [[UIImagePickerController alloc] init];
cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;
cameraUI.mediaTypes = [[NSArray alloc] initWithObjects:(NSString*)kUTTypeImage, nil];
cameraUI.allowsEditing = YES;
cameraUI.delegate = self;
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:cameraUI animated:YES];
이 클래스는 게임이 모달 뷰 컨트롤러의 진행 상황을 볼 수 있도록하는 상태 변수를 노출합니다. UIImageControllerDelegate 기능에 의해
State = CAMERA_ACTIVITY_WORKING;
을 그리고 업데이트 : 은 그것은 initalized됩니다
- (void)imagePickerControllerDidCancel: (UIImagePickerController*) picker
{
State = CAMERA_ACTIVITY_CANCELED;
[[[[UIApplication sharedApplication] keyWindow] rootViewController] dismissModalViewControllerAnimated:YES];
[picker release];
}
- (void)imagePickerController: (UIImagePickerController*) picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
State = CAMERA_ACTIVITY_IMAGECAPTURED;
[[[[UIApplication sharedApplication] keyWindow] rootViewController] dismissModalViewControllerAnimated:YES];
[picker release];
}
모달 뷰 컨트롤러가 열리고은해야하고 대표가 확실히 전화를받을로 닫습니다. 그러나 게임이 State 변수를 폴링하면 업데이트되지 않아 CAMERA_ACTIVITY_WORKING을 반환합니다. 변수를 휘발성으로 만들려고 시도했지만 아무 효과가 없습니다.
아무도 도와 줄 수 있습니까?
편집 : 전체 클래스 소스 코드
@interface Camera : UIViewController<UIImagePickerControllerDelegate, UINavigationControllerDelegate>
{
volatile State State;
UIImage* CapturedImage;
}
- (void)imagePickerControllerDidCancel: (UIImagePickerController*) picker;
- (void)imagePickerController: (UIImagePickerController*) picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
- (bool) IsAvailable;
- (bool) Show;
- (State) GetState;
@end
하는 .m
@implementation Camera
- (id)init
{
self = [super init];
if(!self) return self;
State = CAMERA_ACTIVITY_WORKING;
CapturedImage = NULL;
return self;
}
- (void)imagePickerControllerDidCancel: (UIImagePickerController*) picker
{
DEBUG_LOG("imagePickerControllerDidCancel");
State = Poppet::ICameraActivity::CAMERA_ACTIVITY_CANCELED;
DEBUG_LOG("State: " + STRING_CAST(State));
[[[[UIApplication sharedApplication] keyWindow] rootViewController] dismissModalViewControllerAnimated:YES];
[picker release];
}
- (void)imagePickerController: (UIImagePickerController*) picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
State = CAMERA_ACTIVITY_IMAGECAPTURED;
[[[[UIApplication sharedApplication] keyWindow] rootViewController] dismissModalViewControllerAnimated:YES];
[picker release];
}
- (bool) IsAvailable
{
return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == YES;
}
- (bool) Show
{
if(![self IsAvailable]) return false;
State = CAMERA_ACTIVITY_WORKING;
UIImagePickerController* cameraUI = [[UIImagePickerController alloc] init];
cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera; //Get Image From Camera
cameraUI.mediaTypes = [[NSArray alloc] initWithObjects:(NSString*)kUTTypeImage, nil];
cameraUI.allowsEditing = YES;
cameraUI.delegate = self;
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:cameraUI animated:YES];
return true;
}
- (State) GetState
{ return State; }
@end
은 강력하게, 그리고 당신이 viewDidAppear 또는 viewWillAppear 방법을 재설정하지 않습니다 확인? imagePicker이 기각로하기 때문에, 이러한 방법은 다른 것을 원하셨습니까, 자동으로 –
내가 주 강력하게 만들 수 없다, 그것의하지에 대한 참조를 호출 할 것인가? 나는 viewDidAppear를 구현하고 있지 않다 또는 – XZodia