- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我通过 ray wenderlich 学习 Core Graphic 时,
一步是转换 UIBezierPath,var transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
,
不知道为什么后面的步骤是transform = transform.translateBy(x: 15, y: 30)
?
我不知道 x 和 y 位置是如何计算出来的。
通过打印 UIBezierPath currentPoint print(medallionPath.currentPoint)
,我认为宽度应该是 (x1 - x2) * 0.5
,高度应该是 y1 - y2
,真不知道为什么会这样
(x: 15, y: 30)
完整代码如下,已在 Playground 中测试
let size = CGSize(width: 120, height: 200)
UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
let context = UIGraphicsGetCurrentContext()!
//Gold colors
let darkGoldColor = UIColor(red: 0.6, green: 0.5, blue: 0.15, alpha: 1.0)
let midGoldColor = UIColor(red: 0.86, green: 0.73, blue: 0.3, alpha: 1.0)
let medallionPath = UIBezierPath(ovalIn: CGRect(x: 8, y: 72, width: 100, height: 100))
print(medallionPath.currentPoint)
// (108.0, 122.0)
print(medallionPath.bounds)
// (8.0, 72.0, 100.0, 100.0)
context.saveGState()
medallionPath.addClip()
darkGoldColor.setFill()
medallionPath.fill()
context.restoreGState()
// question
var transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
// transform = transform.translatedBy(x: 15, y: 30)
medallionPath.lineWidth = 2.0
//apply the transform to the path
medallionPath.apply(transform)
print(medallionPath.currentPoint)
// (86.4, 97.6)
print(medallionPath.bounds)
// (6.4, 57.6, 80.0, 80.0)
medallionPath.stroke()
//This code must always be at the end of the playground
let image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
最佳答案
transform = transform.translatedBy(x: 15, y: 30)
是一个翻译。它将整个路径向右移动 15
向下 30
.您的问题是魔数(Magic Number) 15
在哪里?和 30
来自。
奖章图有一个尺寸为 100
的圆x 100
从位置 (8, 72)
开始由这行代码建立:
let medallionPath = UIBezierPath(ovalIn: CGRect(x: 8, y: 72, width: 100, height: 100))
代码然后通过将原始路径缩放 0.8
添加一个内环, 所以它将是一个 80 x 80
圆圈。为了让这个小圆环的中心与大圆的中心对齐,它需要额外偏移 10
在水平和垂直方向上。 (较小的圆圈是 20
水平和垂直较小,因此将它移动 1/2
的 20
使其正确对齐)。然后目标是将其定位在 (18, 82)
。与 width: 80, height: 80
.
因此,我们需要在 X 和 Y 方向上应用平移(移动),以便在缩放路径时我们最终得到锚定在 (18, 82)
的路径。 .棘手的一点是缩放应用于移位值,因此也必须考虑到这一点。
因此,我们从 8
的 X 位置开始, 我们想应用一些翻译值 dx
这样当结果按 0.8
缩放时我们最终得到值 18
:
(8 + dx) * 0.8 = 18
求解dx
:
dx = (18 / 0.8) - 8
dx = 14.5
与 Y 类似,我们从 72
的 Y 位置开始并想申请翻译 dy
这样当它按 0.8
缩放时我们最终得到 82
:
(72 + dy) * 0.8 = 82
求解dy
:
dy = (82 / 0.8) - 72
dy = 30.5
因此,数学上正确的翻译是 (14.5, 30.5)
:
transform = transform.translatedBy(x: 14.5, y: 30.5)
Ray Wenderlich 四舍五入为 (15, 30)
由于某些只有他们知道的原因(也许是因为整数在代码中看起来更好?)。有可能他们没有费心做数学运算,只是尝试值直到它看起来正确。
关于iOS Core Graphic,如何计算CGAffineTransform(scaleX offset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57841983/
我想知道如何在 OCaml 中设置文本大小。我尝试了 Graphics.set_text_size,我猜这应该可以解决问题。 但是无论我输入 set_text_size 200 还是 set_text
我想使用mathematica 为我正在写的书绘制图表。我想在mathematica中画一个图,将其保存为图片,然后将其导入到quarkxpress中,最后将其导出为pdf。 我的问题是最好使用哪种格
在顶层加载 Graphics 模块时,我收到一条错误消息“找不到 graphics.cma”。 我使用的是 OS X,而且我很确定我已经正确安装了 OCaml,因为我已经使用了大约一个月了。所以看起来
我知道 DDS 文件的存在,允许在 as/400 上对显示图形进行编程,但是还有其他方法吗? 具体来说,我想要做的是直接操作终端缓冲区,以便能够显示除文本之外的任何其他内容。例如,终端如下所示: 假设
Graphics.Save 与 Graphics.BeginContainer 有何不同? 最佳答案 看看here : The documentation does not differentiate
由于 Gdiplus::Graphics::DrawGraphics(Graphics*, x, y) 不存在,执行此类操作的最佳方法是什么? 例如,创建一个 Graphics 对象,使用各种 Dra
你能看出这有什么问题吗: (define (box d x1 y1 x2 y2) ( (graphics-draw-line d x1 y
我想编写一个 2D 游戏引擎。我遇到的问题(我不使用opengl之类的东西,所以我用cpu渲染)是,我通过graphics.drawImage()只得到7fps;您有任何加快速度的建议或其他替代方案吗
我在某些代码中发现了渲染错误,并找到了解决方法,但我想知道为什么我会得到不同的行为。在旧代码中,背景(有时)会呈现为白色,尽管在调试时 getBackground() 会返回正确的颜色。 旧代码: @
有谁知道是否有办法(也许通过外部API)将图形绘图/转换为多个图形?这个想法是同时保存 PNG 和 PDF(使用 Java IText 库)。 最佳答案 您可以将 Graphics 对象写入(java
我试图了解如何在英特尔芯片组上以 x86 保护模式绘制简单图形。我已经(有点)知道如何使用 VGA 接口(interface)来做到这一点,并且我正在尝试了解如何使用 G35 Express 来做到这
在我的应用程序中,我生成了一个条形码图像,该图像是根据用户使用 OpenFileDialog 上传的文件中的数据生成的。我的目标是允许用户在屏幕上查看条形码数据和图像本身,打印并使他们能够将两者保存为
我是 Java 新手,我只是想得到一些简单的东西,可能类似于 Zelle's graphics对于Python。 最佳答案 Java 类 Graphics和 Graphics2D应该包含 Zelle
如何将 FMX.Graphics.TBitmap 转换为 VCL.Graphics.TBitmap 或 Vcl.Imaging.PngImage.TPngImage? 我的项目中有FMX表单和VCL表
我需要找到用于间距目的的字体大小,发现这很有帮助:https://docs.oracle.com/javase/tutorial/2d/text/measuringtext.html 但是,我不确定如
我有一点奇怪的错误是由一个看似简单的问题引起的。 在我的源代码中,我尝试使用 QQuickPaintedItem 来呈现 QWidget 派生类 (QPushButton) 的整体外观,然后将其绘制到
我正在尝试通过具有以下规范的设备来解决 Android 应用程序崩溃的问题: Device PAP3400DUO 1 Manufacturer — Android version Android 4.
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我有这行代码: mBgTransition = (TransitionDrawable) mSwitchBg.getBackground(); 背景曾经是一个常规的可绘制对象, 但现在是 9 个补丁
当我的应用程序在启动时崩溃时尝试实现自适应图标时出现此错误。 我无法想象为什么会收到此错误,因为在下面错误日志中提到的文件(MainActivity 和 BaseActivity)中,我没有使用Ada
我是一名优秀的程序员,十分优秀!