小编Wey*_* Ng的帖子

如何在 macOS 上的 SwiftUI 中实现拖放至第 3 方应用程序

我试图通过 Google 寻找答案,但我发现的只是如何接受其他应用程序的拖放并在单个应用程序中拖放,而且主要集中在 iOS 上,而没有很多 macOS 相关资源。

我编写了一个 macOS 工具栏应用程序,试图对该应用程序以编程方式创建的图像实现拖放,并且仅在内存中作为 NSImage 进行拖放。为了允许图像可拖动,我实现了一个 DraggableImage 结构来代替ImageSwiftUI 视图中的视图:

struct DraggableImage: View {
    let image: NSImage

    var body: some View {
        Image(nsImage: image)
            .resizable()
            .scaledToFit()
            .padding()
            .onDrag {
                guard let tiffRepresentation = image.tiffRepresentation,
                      let bitmapImage = NSBitmapImageRep(data: tiffRepresentation),
                      let bitmapRepresentation = bitmapImage.representation(using: .png, properties: [:]) else {

                    return NSItemProvider(item: image.tiffRepresentation as NSSecureCoding?, typeIdentifier: kUTTypeTIFF as String)
                }

                let provider = NSItemProvider(item: bitmapRepresentation as NSSecureCoding?,
                                              typeIdentifier: kUTTypePNG as String)

                provider.previewImageHandler = { (handler, …
Run Code Online (Sandbox Code Playgroud)

macos drag-and-drop swiftui

8
推荐指数
1
解决办法
1313
查看次数

如何在Swift 3中将'void*'从C函数转换为'UnsafeMutableRawPointer'?

我正在尝试将一个lua桥从Swift 2转换为Swift 3.我不是原作者,因此我不太了解库的各个方面,原作者似乎对继续处理该项目不感兴趣.我完成了大部分的转换,但仍有一个地方我被困住了,无法弄明白.我试过在SO和互联网上搜索,但找不到任何可以帮我解决问题的东西.

如果有人有兴趣查看完整的源代码,这里是我在github上的项目分支:https://github.com/weyhan/lua4swift(我的更改是在Swift3分支中)

请允许我设置上下文中我遇到的错误.有一个Userdata类,特别是在方法中userdataPointer<T>() -> UnsafeMutablePointer<T>,c函数lua_touserdata返回userdata的块地址作为void *指针类型.

用Swift 2编写的原始代码:

public class Userdata: StoredValue {

    public func userdataPointer<T>() -> UnsafeMutablePointer<T> {
        push(vm)
        let ptr = lua_touserdata(vm.vm, -1)
        vm.pop()
        return UnsafeMutablePointer<T>(ptr)
    }

    public func toCustomType<T: CustomTypeInstance>() -> T {
        return userdataPointer().memory
    }

    public func toAny() -> Any {
        return userdataPointer().memory
    }

    override public func kind() -> Kind { return .Userdata }

}
Run Code Online (Sandbox Code Playgroud)

在使用Xcode 8迁移工具进行转换后,Xcode抱怨返回行有错误Cannot invoke initializer for type 'UnsafeMutablePointer<T>' with …

c macos ios swift3 xcode8

6
推荐指数
1
解决办法
602
查看次数

标签 统计

macos ×2

c ×1

drag-and-drop ×1

ios ×1

swift3 ×1

swiftui ×1

xcode8 ×1