问题标签 [drawrect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1903 浏览

objective-c - drawRect 需要帮助:

我在使用 drawRect 时遇到了一个基本问题:任何建议将不胜感激。

应用程序需要在不同的时间绘制各种 .png 图像,有时有动画,有时没有。

我希望坚持的一个设计目标是在 drawRect 中包含代码:非常简单且“愚蠢” - 即只进行绘图而没有其他应用程序逻辑。

要绘制图像,我使用 UIImage 的 drawAtPoint: 方法。由于该方法不以 CGContext 作为参数,因此只能在 drawRect: 方法中调用。所以我有:

一张照片的一切都很好。为了绘制多个图像(随着时间的推移),我采用的方法是维护一个字典数组,每个字典包含一个图像、要绘制的点位置和一个启用/抑制该图像绘制的标志。随着时间的推移,我将字典添加到数组中,并通过 UIView 的 setNeedsDisplay: 方法触发绘图。使用字典数组可以让我随时完全重建整个显示。drawRect: 现在变成:

还可以。代码简单紧凑。动画这是我遇到问题的地方。第一个问题是我把动画代码放在哪里?我把它放在 UIView 还是 UIViewController 中?如果在 UIView 中,我是把它放在 drawRect: 还是其他地方?因为实际的动画取决于应用程序的整体状态,所以我需要嵌套的 switch 语句,如果放在 drawRect: 中,它看起来像这样:

此外,为了使多个连续动画正常工作,需要有一个涉及动画委托 animationDidStop: 回调的外部控制机制,它将设置字典中的 needsDisplay 条目以允许/禁止绘制(和动画)。

我们现在的重点是,这一切都开始变得非常丑陋。进一步来说:

  • drawRect:开始迅速膨胀并包含不是“只是绘制”代码的代码
  • UIView 需要对应用程序状态的隐式感知
  • 整个绘图过程现在至少分布在三种方法中

以及这篇文章的重点:我怎样才能做得更好?就整体结构而言,专家们会推荐什么?如何将应用程序状态信息保持在视图之外?我是不是从错误的方向看这个问题。我应该考虑一些完全不同的方法吗?

0 投票
1 回答
2858 浏览

iphone - 使用 loadHTMLString 在 drawRect 中渲染 UIWebView

我遇到了 UIWebView 的问题。我想在其中呈现我自己的 html 代码。当我将 webview 添加为子视图并放入一些 html 代码时,它呈现得很好。当它使用 drawRect 方法进行一些优化的 tableview 单元格绘图时,就会出现问题。以这种方式绘制 UIView 后代效果很好。甚至可以使用 loadRequest 方法加载 URL,设置委托,符合 UIWebViewDelegate 协议并在调用 webViewDidFinishLoad 时使用 setNeedsDisplay 重绘表格单元格。它确实显示了,但是当涉及到 loadHTMLString 时,什么都没有显示,只有一个白色的矩形。由于性能原因,我必须在 drawRect 方法中进行绘图。

有任何想法吗?在此先感谢尼克

UIWebView 加载的 html 代码的示例代码段:

drawRect 方法的片段:

0 投票
1 回答
1581 浏览

actionscript-3 - 为什么在 ActionScript 中没有记录 drawRoundRectComplex()?

在学习 actionscript 3 的图形类时,我遇到了未记录的drawRoundRectComplex()方法。它是 8 个参数的变体drawRoundRect(),最后四个是每个角的直径(x、y、宽度、高度、左上角、右上角、左下角、右下角)。

这似乎是一个非常有用的方法,所以我很好奇是否有人知道adobe选择不记录它的任何原因?

0 投票
3 回答
9674 浏览

iphone - iPhone SDK:方向更改后如何在 UIView 子类上触发 drawRect?

我正在继承 UIView 并覆盖 drawRect 方法。我注意到视图的 drawrect 仅在视图首次加载时被调用。之后,它就再也没有被调用过。如何确保在方向更改后调用它?我试过在旋转前后的视图上调用 setNeedsDisplay ,但没有这样做。

0 投票
2 回答
1259 浏览

iphone - 如何使用 CGContextRef 使 View 类中的绘图方法工作?

我在 View 类中有这两种方法。drawRect 方法总是在视图初始化时被调用。但我无法让drawLine方法工作。当它被调用时它什么都不做。我应该处理 cgimagecontext 或类似的东西吗?请帮忙!!

0 投票
1 回答
386 浏览

iphone - 从笔尖加载后在 uilable 上画线

这是我的代码

我试图在 UIlabel 上画一条线,我正在从 nib 加载我的视图。我不知道我在做什么错。如果我绘制整个视图而不是从笔尖加载,我就可以正常工作。(但我不想这样做)..我希望我的问题很清楚..

0 投票
2 回答
4962 浏览

iphone - iPhone CALayer 堆叠顺序

我正在使用 CALayers 绘制到 UITableViewCell。我试图弄清楚如何根据 UITableViewCell 的内容对图层进行排序。例如:

  1. 我在 cellForRow:atIndexPath 方法中向 UITableViewCell 添加标签
  2. 在 UITableViewCell 的 drawRect 方法中,我使用当前上下文绘制了一些内容
  3. 此外,在 drawRect 我添加了一些子层

那么这些元素的顺序是什么。我知道我在 CALayers 上有 zPosition,但我不确定它们是否总是在 UITableViewCell 的任何子视图之上。而且我不确定在 drawRect 中绘制的内容的顺序。任何帮助或文档链接都会很棒。我已经阅读了核心动画编程指南,但没有看到任何可以回答的地方。

0 投票
2 回答
604 浏览

iphone - 自定义 UITableViewCell 未正确隐藏视图

我正在使用苹果的自定义表格视图单元格代码并修改单元格视图中的 drawRect 代码,使其看起来像我想要的那样。我已将其更改为具有一些 UILabel 以及 UIProgressView。

如果正在构建单元格的数据没有特定字段,我希望隐藏 UIProgressView。这工作了一段时间,但是当一个单元格从滚动中重新排队时,进度视图将再次开始显示,即使我将它设置为隐藏 = YES。我试过不创建 ProgressView ,除非数据在那里并且也不起作用。

我认为答案在 [self setNeedsDisplay] 中,但这似乎没有帮助。

以下是 drawRect 中继续显示的进度视图的代码:

0 投票
1 回答
4269 浏览

iphone - 在自定义 UITableViewCell 上绘制选定状态

我有一个客户UITableViewCell,他的整个显示器都画在drawRect. 当它绘制时,它会创建CGLayers,以便在更改某些内容时可以重用某些部分。

我已将其更改UITableViewCellSelectionStyle为“无”,因为我不希望默认选择的视图覆盖我的绘图。

我的问题是我调用setNeedsDisplaysetSelected:animated:我的单元格,但是到了drawRect被调用的时候,setSelected:animated:已经再次调用以取消选择该单元格。在我的表视图控制器didSelectRowAtIndexPath中,我deselectRowAtIndexPath按照 Apple 的建议进行调用。

编辑 - 我也尝试从我的表格视图控制器中调用我的单元格上的 setNeedsDisplay ,(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath但这并没有改变任何东西。

有任何想法吗?谢谢。

0 投票
3 回答
6269 浏览

iphone - iPhone:你怎么能画出一幅图像

代码示例

=================

我想将图像中的某个矩形复制到上下文中,因此不会绘制整个图像,而只是图像的一部分。有人对此有解决方案吗?我在谷歌和文档上都找不到任何东西。

我知道有其他选择,例如: 1. 创建一个带有剪辑的 UIView,然后将 UIImageView 放置在其中。2. 在 UIScrollView 内创建 UIImageView 并使用内容偏移。

但是我觉得这些很烂...