问题标签 [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 投票
2 回答
471 浏览

iphone - 在 drawRect 方法中绘制时可以访问视图吗?

在创建 tableViewCell 的内容视图时,我在 drawRect: 内使用了 drawInRect:withFont、drawAtPoint... 等,因为我只需要放置一些文本。事实证明,绘制的部分文本需要是可点击的 URL。所以我决定创建一个 UIWebView 并将其插入到我的 drawRect 中。一切似乎都很好,问题是与 UIWebView 的交互没有发生。我尝试启用交互,但没有奏效。我想知道,因为有了drawRect:我正在绘制到当前的图形上下文,我可以做些什么来让我的子视图与用户交互?
这是我在 UITableViewCell 类中使用的一些代码。

正如我所说,视图绘制得很好,但是与外部的 webView 没有交互。URL 嵌入到 HTML 中并且应该是可点击的。它不是。我让它在另一个视图上工作,但我在那个视图上放置了视图。有任何想法吗?

0 投票
1 回答
1624 浏览

ios - 更新 UIView 子类中 drawRect 中绘制的组件中的文本

我有一个 UIView,它的子类在界面生成器中设置为我创建的 UIView 子类。我想更新持有它们的 UIView 类中的标签。我似乎无法更新在 drawRect 中绘制的任何标签的文本。我需要在 UIView 子类中更改的绘图元素有哪些选项?

0 投票
1 回答
855 浏览

android - 以多种屏幕分辨率、密度填充整个屏幕

我想在所有 Android 手机上绘制一个填充整个屏幕的矩形,所有分辨率,所有屏幕密度。一切...... :) 首先,根据我的理解,Canvas.drawRect 用作​​以像素为单位的尺寸值。希望这是正确的。作为 Android 新手,我认为如果我只是这样写就足够了,因为目前没有分辨率高于 1024x1024 像素的 Android 设备:

但似乎在某些设备上,这个 Rectangle 并没有填满整个屏幕。奇怪的是,我无法解释自己的是,这并不总是发生,而是在某个时间点发生......无论如何,代码似乎有问题,所以我想把它改成这样,但现在确定 metrics.widthPixels 和 metrics.heightPixels 将解决我的问题:

我想知道这是否正确,以及这段代码是否会覆盖所有屏幕,矩形是否会填满整个屏幕。当然,使用这种方法,我还必须注意屏幕方向,因为当屏幕处于横向时,它们之间的值似乎会交换。

0 投票
1 回答
291 浏览

iphone - UIView drawRect中的偶数和奇数缓冲区?

再次您好(感谢大家之前的宝贵帮助)。

新问题:我正在进行物理模拟,但遇到了玩具版本的问题。它所做的只是每次NSStimer timer调用该tick方法时在 iPhone/Touch 屏幕上绘制一个随机矩形。我已将这些调用编入索引int frameCount。人们看到的是两组图像逐渐建立起来:一组用于偶数帧,另一组用于奇数帧。frameCount我通过将偶数和奇数在稍微不同的位置上绘制到屏幕上来验证这一点。因此,人们会看到计数与帧中的图像同步来回闪烁。缩写代码如下。我很感激你可能有的任何建议。在我看来,必须有两个屏幕外缓冲区。但是我在这里一无所知:-) 即使这是真的,我也不知道如何合并它们,或者将一个复制到另一个。

// UIView 的子类 FooBar 实现的相关部分:

0 投票
4 回答
563 浏览

iphone - drawRect 如何请求/rcv 模型新计算的图像?

我的第一个应用程序在 iphone/ipad 上运行,它使用核心图形和手势识别器(不是 OpenGL 或触摸事件)。应用程序、视图和控制器是使用 IB 设置的。它只是 ViewController 中的一个 View。我添加了 CG 调用以绘制到 CG 上下文中。手势被添加到视图中,但在视图控制器中处理。视图控制器使用访问器来更改决定在视图中绘制什么的变量。计算(即模型)嵌入在视图中。该应用程序运行良好,但我想添加功能,例如通过电子邮件发送和保存已绘制的内容。(我知道我需要其他图形上下文)。

传统智慧告诉我我需要使用 MVC 范式,这意味着将模型从视图中分解为自己的对象。所以,我重新分解了代码。我为模型手动添加了一个 NSObject,它很好地包含了数据和所需的方法。没有编译错误或警告。

现在,当视图的 drawRect 被触发时,我想通过控制器从模型中获取更新的图像。在我希望返回图像的关键位置,NULL 回来了。我可能只是没有正确的对象引用,但是我太困惑了,无法消除迷雾,而且我正在真空中工作,所以我正在寻求您的帮助。谢谢阅读。

总结和问题

视图控制器始终具有可以传递给模型的当前参数。该模型可以在给定这些参数的情况下计算位图图像。我很确定我有那么多。

我的问题是(用各种不同的方式表达):

将图像从模型获取到视图的最佳方法是什么(通过控制器:^)视图应该如何向视图控制器发送消息以发起请求?

模型如何将图像返回给控制器?我假设我只是通过您推荐的任何链将 CGContextRef 传回。

关于我:我是 OOP、Objective-C、Xcode 和 IB 的新手。我多次观看了斯坦福大学的大部分讲座,研究了 Goldstein 的傻瓜书,浏览了 Apple 文档。菜鸟很难从这些来源中收集到适当水平的答案。我只是需要更多的“经验”。我太绿了,我什至不知道如何引用视图控制器,除了在视图的接口定义中包含“myViewController *viewController”!我一直在谷歌上搜索并阅读 Stackoverflow 上类似问题的答案。我不敢相信我没有找到任何合适的东西。我希望有一两个实用的原则可以作为我的指导。

请指教。

这类似于reference-to-model-data-in-a-view-instance-drawrect,没有得到满意的回答。

0 投票
3 回答
1966 浏览

iphone - 运行循环/drawRect 中神秘的“渐进式减速”问题

这是一个真正的谜。

想象一下,您正在执行在屏幕外绘制复杂图像 (CGLayer) 的常规过程,并且在绘制时间歇性地将图像更新到屏幕上。

如您所知,这样做的方法是:在后台运行大型绘图过程,并根据需要调用前台的 setNeedsDisplays,从而更新图像。这是微不足道的,只需两行代码即可实现。

但是,当您这样做时,会出现一个神秘的问题:每个绘图周期所花费的时间,每次都会增加,变得无法使用。此外,时间可能会不规律地变化。

这是一个已知的 iOS 错误,还是?有没有人见过这个?

这是一个非常简单、非常容易理解的应用程序,它演示了这个问题:

http://www.fileswap.com/dl/p8lU3gAi/stepwiseDrawingV2.zip.html

下面的输出示例。

有谁知道为什么会这样?操作系统的行为非常奇怪。

后来...... FELZ 想出了一个惊人的解决方法。Felz每轮复制一次 CGLayer。这完全停止了奇怪的行为。

然而,仍然没有真正清楚地了解到底发生了什么:因此,从字面上看,当这个奇怪的问题出现时,时间在哪里?

这是一个很长的输出示例......

请注意,您有时会得到如下“双重奇怪”的结果:它表现出“正常”的奇怪行为:时间每转一圈都会增加。但是,有时时间会下降到“非常快”几轮,然后返回。很奇怪吧?此外,如果您在模拟器上运行,请在 Mac 上快速单击前后不相关的应用程序以获得“更奇怪”的结果。

尽管费尔兹给出了一个完美的工作答案,但实际的机制仍然是一个谜。

0 投票
2 回答
1680 浏览

android - 在Android中多行显示文本

我有一个图形 Android 项目,我提供用户界面功能的主要技巧是使用 drawrect 和 drawtext 在屏幕上绘制一个带有标签的矩形。然后,我捕捉触摸事件并检查它们是否出现在矩形中——当它们出现时,瞧,我有一个按钮。

它可能不是最优雅的方法,但似乎很有魅力。然而,并不是我所有的标签都写在一行上,我想把它们写在两行上。我想我可以写两行单独的行并手动将文本安排得很好地间隔和居中,但如果可能的话,我想避免这种情况。

在Android中,有没有一种简单的方法来拆分文本标签并一步写出来?

谢谢,R。

0 投票
1 回答
764 浏览

delphi - 为什么带有 pmXOR 笔的 TCanvas.Rectangle() 只能“有时”工作?

我开发了以下 AnimateRects() 方法来在 Windows 桌面上绘制动画矩形。我用它来动画显示模态表单,使它看起来像是从网格单元格中“生长”出来的。

在表单显示之前,我使用 bExpand 参数 = True 调用该方法一次。然后当用户关闭表单时,我再次调用它,但使用 bExpand = False,以显示表单“折叠”到网格单元中。

问题在于 bExpand = False 情况......在循环的第一次迭代中,对 Rectangle(r) 的第一次调用按预期绘制矩形,但就好像对 Rectangle(r) 的第二次调用从未被调用过—— - 第一个矩形永远不会被异或。因此,在绘制了“折叠”矩形序列之后,我最终将第一个矩形保留为屏幕上的工件。

任何想法我做错了什么?

0 投票
2 回答
3519 浏览

objective-c - Objective-C:在 -(void)drawRect 中使用“if else”语句来获取复选框状态?

我正在尝试设计一个界面,当用户单击复选框时,它将在NSView框中显示图像。有 12 个复选框,我有……在我的脑海中……一个 if else 语句的布局来处理复选框的所有不同组合。我已经在声明中列出了 if else 语句-(void)drawRect:(NSRect)rect,但它们似乎不起作用。(我没有收到错误)。我发现它确实在程序首次启动时正确评估了 if else 语句。但是,当我单击激活包含“ setNeedsDisplay:”的操作的复选框时,不会重新评估“if else”语句。(这当然意味着我不明白究竟是如何setNeedsDisplay:工作的。哈哈)

NSLog在不同的地方发表了一些声明,看看发生了什么。我在 -(void)drawRect 声明中有一个,以确保它setNeedsDisplay:正在工作。确实如此。每当我单击一个复选框时,它都会激活 setNeedsDisplay。我在“if else”语句中的两个地方也放了一个NSLog:一个在第一部分:

在第一组“if else”条件句的末尾有一个:

我希望当程序第一次加载时,“没有第一个音符选择”会出现在我的控制台中。它确实如此。没有发生的是,当我激活“cNatural”复选框时,它会在控制台中显示“No First Note Selection”字符串。就像它没有注册复选框的状态更改一样。

为了确保我在 Interface Builder 中正确连接了复选框,我创建了这行代码,当复选框被切换时激活:(此代码还包括setNeedsDisplay:

所有这些都按照我在控制台中的预期显示,但-(void)drawRect部分中的“if else”语句似乎没有注册。

我到处找,找不到解决办法。任何帮助都感激不尽。

这是我的 .m 文件的相当长的代码:

0 投票
2 回答
1651 浏览

xcode - 帮助 Xcode drawRect 使用文本字段输入值

我目前正在尝试在 XCode 中制作条形图。我已经尝试过 CPGraph 和周围的所有东西,但它们都过时了,我需要 XCode 4 的帮助。我对此完全陌生,这就是我需要你帮助的原因。

这是我的代码:

-(void)drawRect:(CGRect)rect

{

}

请注意,我已更改“值”的点值之一。我所做的是创建一个 UITextField,我希望能够在 UITextField 中写入 500,并且该栏会自行调整。目前,NSLog 告诉我该值等于 0,即使在构建我的应用程序之前,我在 TextField 中手动输入了一个数字。我已经搜索了 3 天,我发现的所有内容都给了我错误并且不完整,因为我说我对 xcode 中的 Objective-c 几乎一无所知。我在搜索过程中也注意到,如果你不告诉他,这种类型的行不会实时刷新。如果这是我的问题的一部分,我也希望得到帮助。如果您想了解有关我的代码的更多信息,请告诉我。如果有人可以帮助我,我将不胜感激。

这是我的 .h :

@interface draw2D:UIView

{

}

@property(非原子,保留)IBOutlet UITextField *textField;

@结尾