- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 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试图回答类似的问题。然而,从未找到解决方案,但最后一点建议是:
However, when I add an
NSAttributedString
with a GIF attachment toNSSharingServicePicker
, the shared image is not animated. I can't add the wrapperRTFD
data to the picker, as it can only share objects that supportNSPasteboardWriting
protocol, and theRTFD
is returned asNSData
.Copying
RTFD
data to pasteboard asNSRTFDPboardType
works and preserves animation
是否可以将 GIF 转换为 RTDF
对象,将其复制到粘贴板,检索粘贴板项目,然后共享该对象?还是无法使用 NSSharingService
保存动画?
编辑 2:
正如@Cocoadelica 在评论中提到的,我想知道是否需要 CoreImage
来保留动画。我尝试先将 GIF 文件保存到硬盘,然后将其加载到 NSImage
,但它再次将其转换为静态 PNG。
这非常、非常、非常令人沮丧。
最佳答案
我最终通过 Cocoa-dev 邮件列表得到了回复。基本上,您需要附加一个直接链接到该文件的 NSURL
。它不适用于外部图像,并且从未使用过 NSImage
:
NSString *fileUrl = @"http://i.imgur.com/V8w9fKt.gif";
NSString *fileName = [fileUrl lastPathComponent];
NSURL *saveUrl = [NSURL URLWithString:[NSString stringWithFormat:@"file://%@", NSTemporaryDirectory()]];
saveUrl = [saveUrl URLByAppendingPathComponent:fileName];
// Write image to temporary directory
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileUrl]];
[data writeToURL:saveUrl atomically:YES];
// Attach the raw NSURL pointing to the local file
NSArray *shareItems = [NSArray arrayWithObjects:saveUrl, @"Text", nil];
// Open share prompt
NSSharingService *service = [NSSharingService sharingServiceNamed:NSSharingServiceNameComposeMessage];
service.delegate = self;
[service performWithItems:shareItems];
然后我实现了 didShareItems 和 didFailToShareItems 以便我可以在共享完成后删除文件:
- (void)sharingService:(NSSharingService *)sharingService didShareItems:(NSArray *)items{
NSString *path = items[0];
[self removeFile:path];
}
...
- (void)removeFile:(NSString *)path{
[[NSFileManager defaultManager] removeItemAtPath:path error:NULL];
}
对于那些苦苦挣扎的人,我发现需要以下方法才能正常工作:
- (NSWindow *)sharingService:(NSSharingService *)sharingService sourceWindowForShareItems:(NSArray *)items sharingContentScope:(NSSharingContentScope *)sharingContentScope{
return self.window;
}
我意识到其中一些代码不正确(我的 URLWithString
创建是违反直觉的,但我正在学习),但这应该让那些苦苦挣扎的人有一个起点。
关于objective-c - NSSharingService 与 GIF 动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23598158/
我正在使用 NSSharingService 在邮件应用程序中打开电子邮件撰写窗口: NSSharingService* sharingService = [NSSharingService shar
我正在尝试在我的应用程序中添加一些基本的共享功能。首先,我发现 NSSharingServicePicker 类已经实现了共享菜单以及为共享服务指定委托(delegate)的可能性。该解决方案的问题是
如何在 Mac 应用程序中添加共享子菜单?例如 Safari > 文件 > 共享。我戳了一下Apple SharingServices sample code ,但它不包含工作菜单项。 现在我有一个按
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
@IBAction func sendFeedbackPressed(_ sender: AnyObject) { let service = NSSharingService(named:
似乎可以自定义 NSSharingService 使用的 NSWindow。有人知道这样做的任何例子吗? 最佳答案 您可以使用委托(delegate)的 sharingServicePicker:sh
我想在用户分享到时做一些事情 - (void)sharingService:(NSSharingService *)sharingService didShareItems:(NSArray *)it
如何定义使用 NSSharingService 编写的邮件消息的主题? 我已经经历过NSSharingService Class reference ,但我没有在任何地方看到它的定义。以下内容成功启动
是否可以在消息编辑器中填写接收者电话号码(apple id)以通过 [NSSharingService sharingServiceNamed:NSSharingServiceNameComposeM
在山狮上,我尝试使用 AppKit.framework 的 NSSharingService 类来实现新的共享可能性 这种代码一切顺利 NSArray* array = @[ @"myText", [
我从 https://developer.apple.com/library/mac/samplecode/SharingServices/Listings/Sharing_APLAppDelegat
我是Mac OS X应用程序开发的新手,我的问题很简单,我可以通过我的应用程序在默认邮件应用程序中设置收件人和正文文本,但我无法在邮件应用程序中设置抄送和密件抄送收件人。有没有办法通过代码设置CC和B
我是 Objective-C 的新手,但到目前为止我已经基本了解了所有内容。但是,我无法尝试通过 NSSharingService 共享动画 GIF。 我像这样附加图像,其中 image 是一个包含动
我刚刚实现了一个共享按钮,它有一个共享菜单: [_shareButton sendActionOn:NSLeftMouseDownMask]; 并连接此操作: -(IBAction)share:(i
我正在尝试从 Mac 应用程序使用 NSSharingService 发送电子邮件。我将 HTML 代码作为电子邮件正文。当邮件窗口出现时,内容被格式化,但 HTML 结构中的图像被移动到底部电子邮件
我想知道是否有一种方法可以在 Swift 中撰写电子邮件并让它填充诸如 CC 和 BCC 之类的字段。 目前我正在使用 NSSharingService,它似乎只有 Recipient、Subject
我是一名优秀的程序员,十分优秀!