我对Objective-C还比较陌生,但目前为止大部分都能理解。不过我卡在了尝试通过NSSharingService
分享动态GIF图像上。
我使用以下方式添加图像,其中image
是包含动态GIF图像的URL的字符串(例如http://i.imgur.com/V8w9fKt.gif):
NSImage *imageData = [[NSImage alloc] initWithContentsOfURL:[NSURL URLWithString:image]];
NSArray *shareItems = [NSArray arrayWithObjects:imageData, href, nil];
NSSharingService *service = [NSSharingService sharingServiceNamed:NSSharingServiceNameComposeMessage];
service.delegate = self;
[service performWithItems:shareItems];
当代码运行并发送消息时,图片以PNG文件的形式发送,而不是GIF。
我怀疑图片可能被NSImage
或NSData
压缩了,我需要先将图片保存到磁盘上,然后再尝试发送。但我想知道是否可以在不进行额外保存步骤的情况下完成此操作。
编辑1:
我发现一个GitHub repo,它试图解决类似的问题。然而,从未找到解决方案,但最后一条建议是:
然而,当我将带有GIF附件的NSAttributedString添加到NSSharingServicePicker中时,共享的图像不会动画。 我无法将包装器RTFD数据添加到选择器中,因为它只能共享支持NSPasteboardWriting协议的对象,而RTFD返回为NSData。将RTFD数据复制到剪贴板作为NSRTFDPboardType有效,并保留动画 是否可能将GIF转换为RTDF对象,将其复制到剪贴板,检索粘贴板项,然后共享该对象?或者使用NSSharingService无法保留动画? 编辑2:正如@Cocoadelica在评论中提到的那样,我想知道是否需要CoreImage来保留动画。 我尝试先将GIF文件保存到硬盘上,然后加载到NSImage中,但它再次将其转换为静态PNG。这真的非常、非常、非常令人沮丧。
NSImage
中保留类型没有直接的方法吗?我还没有处理过CoreImage
,所以我不太确定我应该用它做什么。 - Charlie