gpt4 book ai didi

ios - viewDidLoad 中的文本消息窗口在其他所有内容之后弹出

转载 作者:行者123 更新时间:2023-11-29 03:12:27 25 4
gpt4 key购买 nike

我在 View Controller 的 viewDidLoad 方法实现中设置了一个文本消息窗口。如果特定的 NSString 对象包含“YES”,那么我调用文本消息窗口的方法,它就会弹出。

所有这些工作正常,唯一的问题是我的短信方法调用实际上是我的 viewDidLoad 中的第一件事,但由于某种原因,在执行 viewDidLoad 中的其他所有操作之后,会弹出短信窗口。

在我的 viewDidLoad 中,在文本消息窗口代码下方,我设置并启动 AVCapture session ,并创建一个“预览层”来显示相机所看到的内容。

尽管此代码位于短信窗口代码下方,但在弹出短信窗口之前您可以看到相机的预览层几秒钟。

这是我的 viewDidLoad 方法实现。请注意我的短信窗口方法调用 [self showSMS] 是如何先于其他所有内容的:

- (void)viewDidLoad
{

[super viewDidLoad];

if([_justFinishedSigningUp isEqual:@"YES"]) {

[self showSMS];
}



if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
// iOS 7
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
} else {
// iOS 6
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}


_session =[[AVCaptureSession alloc]init];


[_session setSessionPreset:AVCaptureSessionPresetPhoto];


_inputDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];


NSError *error;


_deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:_inputDevice error:&error];


if([_session canAddInput:_deviceInput])
[_session addInput:_deviceInput];


_previewLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:_session];


CALayer *rootLayer = [[self view]layer];

[rootLayer setMasksToBounds:YES];


[_previewLayer setFrame:CGRectMake(0, 0, rootLayer.bounds.size.width, rootLayer.bounds.size.height/2)];

[_previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];


[rootLayer insertSublayer:_previewLayer atIndex:0];


_stillImageOutput = [[AVCaptureStillImageOutput alloc] init];


[_session addOutput:_stillImageOutput];

[_session startRunning];

}

下面是帮助控制文本消息窗口的方法实现:

- (void)showSMS {

if(![MFMessageComposeViewController canSendText]) {
UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Your device doesn't support SMS!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[warningAlert show];
return;
}

NSArray *recipents = _usersToInviteToApp;
NSString *message = _textMessageInviteText;

MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
messageController.messageComposeDelegate = self;
[messageController setSubject:@"New Message"];
[messageController setRecipients:recipents];
[messageController setBody:message];

// Present message view controller on screen
[self presentViewController:messageController animated:YES completion:nil];
}


- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult) result
{
switch (result) {
case MessageComposeResultCancelled:
break;

case MessageComposeResultFailed:
{
UIAlertView *warningAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Failed to send SMS!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[warningAlert show];
break;
}

case MessageComposeResultSent:
break;

default:
break;
}

[self dismissViewControllerAnimated:YES completion:nil];
}

最佳答案

您正在使用 viewDidLoad 中的 animated:YES 将某些内容加载到 View 中,这发生在屏幕上什至还没有任何内容之前 ([self presentViewController: messageController 动画:YES 完成:nil];)

您是否尝试过将所有内容移动到 viewDidAppear 或者,如果您希望屏幕在所有内容进入查看之前就在那里,请尝试在您的 中设置 animated:NO >-(void)showSMS 方法。

关于ios - viewDidLoad 中的文本消息窗口在其他所有内容之后弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22106060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com