我需要为我的Xamarin.iOS项目绘制草图/绘画控件,虽然我似乎找不到与C#兼容的版本,但我找到了一个用Objective C编写的好组件。https://github.com/acerbetti/ACEDrawingView < / p>
之前我已经完成了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并将其添加到我的主项目中。
现在,我还有两个问题。
如果我构建并部署到模拟器,我可以运行我的应用程序,直到我尝试从绑定创建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.
......等等。
我已经尝试过返回,重读和重做步骤,并试图重复使用我之前成功绑定的一些脚本和设置而没有运气。
有没有人对可以解决这些问题的建议有什么建议?
答案 0 :(得分:0)
类型或命名空间名称`IACEDrawingTool&#39;无法找到。
添加新界面,例如interface IACEDrawingTool{ }
public enum ACEDrawingMode:nuint
将nuint
更改为ulong