0

我的 Xamarin.iOS 项目需要一个草图/绘画控件,虽然我似乎找不到与 C# 兼容的控件,但我确实找到了一个用 Objective C 编写的好的组件。https://github.com/acerbetti/ACEDrawingView

我以前做过 Xamarin 绑定,所以我希望这个过程会相当简单,但不幸的是,我在此过程中遇到了一些障碍。

我开始创建我的静态库并使用 ant 构建脚本制作 FAT 二进制文件以覆盖设备和模拟器:

我的蚂蚁脚本片段

AceDrawingViewSDK.a: libAceDrawingView-i386.a libAceDrawingView-armv7.a   libAceDrawingView-armv7s.a libAceDrawingView-arm64.a xcrun -sdk iphoneos lipo -create -output $@ $^

接下来,我跑了

sharpie bind --sdk=iphoneos10.1 *.h

在头文件上获取我的 ApiDefinitions 和 Structs 和 Enum 文件。

我检查并删除了验证属性。(他们看起来都很好。)但这就是我的其他一些问题的开始。

The type ACEDrawingLabelViewTransform' already contains a definition forTransform' (CS0102) (AceDrawingViewBinding). 

为了尝试继续前进并获得一些工作,我只是注释掉了这个参考。

然后我遇到了多个类似的问题:

The type or namespace name `IACEDrawingTool' could not be found. Are you missing an assembly reference? (CS0246) (AceDrawingViewBinding)

我认为它与此有关:

// @interface ACEDrawingPenTool : UIBezierPath 
[BaseType(typeof(UIBezierPath))]
interface ACEDrawingPenTool : IACEDrawingTool

和这个:

// @protocol ACEDrawingTool 
[Protocol, Model]
[BaseType(typeof(NSObject))]
interface ACEDrawingTool

我试图解决这个问题,使接口名称保持一致(我尝试了 IACEDrawingTool 和 ACEDrawingTool。)这样做克服了这个错误并允许我编译

我的一个枚举出来了

[Native]
 public enum ACEDrawingMode : nuint
{
Scale,
OriginalSize
}

在这种情况下,我找不到如何处理 [Native] (所以再一次,为了测试,我删除了它。)我尝试使用从枚举中删除 nuint 并使用 uint。这两种方法似乎都可以解决错误。

因此,修复了这些错误后,我能够从绑定项目中生成 .dll 并将其添加到我的主项目中。

现在,我又遇到了 2 个问题。

如果我构建并部署到模拟器,我可以运行我的应用程序,直到我尝试从绑定中创建一个新的 ACEDrawingView 实例。我得到:

Could not create an native instance of the type 'ACEDrawingView': the native class hasn't been loaded.
It is possible to ignore this condition by setting ObjCRuntime.Class.ThrowOnInitFailure to false.

如果我尝试构建并部署到我的手机,我会在构建阶段遇到不同的错误,这会阻止它在设备上启动:

MTOUCH: error MT5211: Native linking failed, undefined Objective-C class: ACEDrawingArrowTool. The symbol 'OBJC_CLASS$ACEDrawingArrowTool' could not be found in any of the libraries or frameworks linked with your application.
MTOUCH: error MT5211: Native linking failed, undefined Objective-C class: ACEDrawingDraggableTextTool. The symbol '_OBJC_CLASS$ACEDrawingDraggableTextTool' could not be found in any of the libraries or frameworks linked with your application.
MTOUCH: error MT5211: Native linking failed, undefined Objective-C class: ACEDrawingEllipseTool. The symbol '_OBJC_CLASS$_ACEDrawingEllipseTool' could not be found in any of the libraries or frameworks linked with your application.

...等等。

我尝试返回、重读和重做步骤,并尝试重用我之前成功绑定的一些脚本和设置,但没有成功。

有没有人有什么可以解决这些问题的建议?

4

1 回答 1

0

找不到类型或命名空间名称“IACEDrawingTool”。

添加一个新界面,像这样interface IACEDrawingTool{ }

公共枚举ACEDrawingMode:nuint

更改nuintulong

于 2016-11-25T01:40:04.833 回答