gpt4 book ai didi

ios - 如何使用 UIPasteboard 异步加载动画 .gif 的图像 URL

转载 作者:行者123 更新时间:2023-11-29 03:33:41 24 4
gpt4 key购买 nike

我的 View 上有一个 UIButton,这是我按下该按钮时的代码

- (IBAction)sendSMS:(UIButton *)sender 
{
NSData *gifImage = [[NSData alloc] initWithContentsOfURL:url];

UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
pasteBoard.persistent = YES;
//pasteBoard.image = self.messageViewImage;
[pasteBoard setData:gifImage forPasteboardType:@"com.compuserve.gif"];

NSString *phoneToCall = @"sms:";
NSString *phoneToCallEncoded = [phoneToCall stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSURL *url = [[NSURL alloc] initWithString:phoneToCallEncoded];
[[UIApplication sharedApplication] openURL:url];
}

我正在尝试复制要粘贴到彩信中的动画 gif。我怎样才能异步完成这个任务?目前,当我按下按钮时,大约需要 3 秒钟,按钮具有蓝色背景,然后弹出彩信。如何才能为用户提供更好的体验?

最佳答案

实现您的目标的一种方法是使用 MessageUI 框架来显示 MFMessageComposeViewController 并添加 GIF 作为附件。使用这种方法,您永远不必将用户切换到消息应用程序——这一切都在您自己的应用程序中完成。以下是您的操作方法。

第一步是将以下框架添加到您的项目中:

  • MessageUI.framework
  • MobileCoreServices.framework

在您的 View Controller 中,添加以下导入:

#import <MessageUI/MessageUI.h>
#import <MobileCoreServices/UTCoreTypes.h>

接下来,为 MFMessageComposeViewController 定义属性:

@property (nonatomic, strong) MFMessageComposeViewController *messageController;

我们正在定义一个属性,以便我们可以处理用户稍后在 MMS View 中点击 Cancel

在 View Controller 的 viewDidLoad 中,添加:

self.messageController = [[MFMessageComposeViewController alloc] init];
self.messageController.messageComposeDelegate = self;

您希望您的sendSMS 方法如下所示:

- (IBAction)sendSMS:(UIButton *)sender 
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSData *gifData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];

if ([MFMessageComposeViewController canSendText]) {
[self.messageController addAttachmentData:gifData typeIdentifier:(__bridge NSString *)kUTTypeGIF filename:@"animated.gif"];

dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController: self.messageController animated:YES completion:NULL];
});
}

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
});
}

在此方法中,GIF 在后台下载并分配给 gifDatagifData 然后作为附件添加到消息编辑器 View 中,并将编辑器 View 显示给用户。

当用户发送彩信或点击 Cancel 按钮时,将调用 messageComposeViewController:didFinishWithResult:。在该方法中,您需要关闭消息编辑器模态视图:

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
[self.smsComposer dismissViewControllerAnimated:YES completion:NULL];
}

result 参数将是 MessageComposeResultCancelledMessageComposeResultSentMessageComposeResultFailed,具体取决于用户的操作。

关于ios - 如何使用 UIPasteboard 异步加载动画 .gif 的图像 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19456530/

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