【问题标题】:Objective-J CPView, CALayer, CPImageView DrawingObjective-J CPView, CALayer, CPImageView 绘图
【发布时间】:2012-11-03 16:07:44
【问题描述】:

我正在学习 Cappuccino Objective J,在绘图时有点难以理解 CPView、CALayer、CPImageView 之间的区别。

我精通 JavaScript,但没有使用 Objective C 和 cocoa 的经验。

我正在为我的 uni 项目构建一个小应用程序,它需要拖放图像、画线和其他形状来链接它们。 gomockingbird

我的问题是我应该使用上面提到的哪一个来放弃和借鉴。我查看了 cappucino.org 网站上的 FloorPlan 示例,它使用 CPImageView 对象拖放项目。由于我从教程中读到 CALayer 已针对此类操作进行了优化,因此我很难知道该使用哪一个。

欢迎提供任何示例或教程的链接。

谢谢。

【问题讨论】:

    标签: cappuccino


    【解决方案1】:

    一般来说,CALayers 是旧的,不应该使用。

    CPViews 是屏幕上最基本的 UI 元素。几乎所有东西都由视图(窗口、图像视图、按钮等)支持。视图可以有任意数量的子视图和一个超级视图。

    如果您想在视图中自定义绘图(即 CoreGraphics 或类似 API 的画布),您需要继承 UIView 或 UIView 的继承者。然后您将覆盖

    - (void)drawRect:(CGRect)aRect;
    

    UIImageView 是 UIView 的子类。它的唯一目的是在屏幕上显示图像。

    对于您的项目,我想我会执行以下操作: 创建一个“画布视图”,这是用户将与之交互的内容。根据需要将 UIImageViews 拖放到画布上。然后对于线条绘制,让画布视图本身从每个图像中绘制线条。

    请务必记住,进行自定义绘图的大型视图往往会变慢。如果您在用户绘图时注意到一些缓慢,那么在所有图像下插入一个临时绘图视图可能是有意义的。然后,当用户放下绘图线时,“画布视图”会自行更新,临时绘图视图会从视图层次结构中删除。

    希望能有所帮助!

    【讨论】:

    • 如果不应该使用 CALayers,为什么卡布奇诺网站上的教程使用图层和仿射变换来实现缩放和旋转?可以通过其他方式完成吗?我认为您的意思是 CPImageView 而不是 UIImageView 。
    • 作为,对不起,你是对的……我的意思是 CPImageView。视图不能开箱即用,只能旋转图层。在 Cocoa 领域,人们出于性能原因使用图层……在 Cappuccino 领域,图层可能会比视图慢,因此通常您不会仅出于性能原因使用它们。不过,转换将是使用它们的一个很好的理由。
    • 感谢您的信息和建议。我确实需要能够调整我的“画布视图”的大小,但我不需要转换。我应该继承 CPView 还是 CALayer?对于菜鸟问题​​,抱歉,很难找到客观的 j 示例,或者我可能在错误的地方寻找。问候
    • 只是 CPView 的子类,这样它就知道如何以任意大小显示内容。否则,CPView 应调整自身大小,以便始终显示其中的所有内容。这将假设您始终将其放在滚动视图中。
    猜你喜欢
    • 2021-10-24
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多