bax*_*rma 4 audio cocoa objective-c nsview
我正在尝试编写一个小的Cocoa应用程序.它涉及一个NSView,我希望用户能够拖动音频文件(例如,来自Finder).但是,我不知道如何只允许将音频文件放入NSView.
我设法做到这一点,认为这将工作:
- (id)initWithCoder:(NSCoder *)coder
{
self=[super initWithCoder:coder];
if ( self ) {
NSString *myType = (__bridge NSString *)(UTTypeCreatePreferredIdentifierForTag(kUTTagClassNSPboardType, kUTTypeAudio, NULL));
[self registerForDraggedTypes: [NSArray arrayWithObject:myType]];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码似乎不允许将任何文件放入NSView.我认为这是因为myType无效使用registerForDraggedTypes.
您可以提供的任何帮助将非常感谢.提前致谢.
注册一个类型,如kUTTypeAudio不注册拖动文件; 它注册拖动音频.它可能适用于接受从其他应用程序拖入的任何类型的音频,但不适用于接受文件.
您需要注册类型kUTTypeFileURL.执行此操作后,用户拖入的任何文件都将点亮您的拖动目标方法.在这个阶段没有办法说"我想要文件,但只有一些文件".
作为拖动目标,您需要验证拖动(in draggingEntered:).您可以在此处测试是否有任何文件是音频文件.您可以选择三种方法:
如果您获得其中一个文件的内容类型(UTI),则必须查看它是否是您可以处理的类型之一.
[NSSound soundUnfilteredTypes].这将返回一个UTI数组,所以你已经完成了; 您可以简单地将传入的UTI与此数组中的UTI进行比较(使用UTTypeEqual).AudioFileGetGlobalInfo获取类型代码列表,然后使用UTTypeCreatePreferredIdentifierForTag将每个文件从一个OSType转换为UTI.*当且仅当检查传入类型是否符合您的任何注册类型而不是相等.如果严格测试它们与您注册的类型是否相等,则需要注册您可以处理的特定音频类型.