- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 CGAffineTransform(rotationAngle:) 在 UIView 的绘制下制作路径动画。我找不到任何方法...
这是我的代码:
public override func draw(_ rect: CGRect) {
//Drawing a dot at the center
let dotRadius = max(bounds.width/15, bounds.height/15)
let dotWidth:CGFloat = 10
let dotCenter = CGPoint(x:bounds.width/2, y: bounds.height/2)
let dotStartAngle: CGFloat = 0
let dotEndAngle: CGFloat = CGFloat(2 * M_PI) // π
var path = UIBezierPath(arcCenter: dotCenter,
radius: dotRadius/2,
startAngle: dotStartAngle,
endAngle: dotEndAngle,
clockwise: true)
path.lineWidth = dotWidth
counterColor.setStroke()
counterColor.setFill()
path.stroke()
path.fill()
arrowLayer.frame = CGRect(x:bounds.width/2, y: bounds.height/2, width: bounds.width, height: bounds.height)
arrow.path = UIBezierPath(rect: CGRect(x: 0, y:0 - 1, width: -250, height: 1)).cgPath
arrow.backgroundColor = UIColor.red.cgColor
arrow.fillColor = UIColor.clear.cgColor
arrow.strokeColor = counterColor.cgColor
arrow.anchorPoint = CGPoint(x:0.5, y:0.5)
arrow.lineWidth = 3
arrow.setAffineTransform(CGAffineTransform(rotationAngle:self.radians(arrowDegree)))
arrowLayer.addSublayer(arrow)
self.layer.addSublayer(arrowLayer)
}
这就是我想要做的:
func rotateButton() {
UIView.animate(withDuration: 1, animations: {
self.arrow.setAffineTransform(CGAffineTransform(rotationAngle:self.radians(self.arrowDegree + 10)))
self.setNeedsDisplay()
})
}
我不知道我是否具体..如果需要更多信息请告诉我。
最佳答案
我建议您将动画与绘图分开。重写 draw()
通常适用于自定义绘图 但不适用于任何类型的动画。
根据分配给 arrow
的属性,它看起来像是一个 CAShapeLayer
。这很好,因为这意味着两者之间已经存在一些分离。
但是,在draw()
中添加 subview 或子层并不是一个好主意。它应该只用于绘图。否则,每次重绘 View 时,这些东西都会重新添加。在这种情况下,它不太明显,因为一遍又一遍地添加了同一层。但仍应避免。
您仍然可以使用 draw()
来渲染居中的点。但预计它不会成为动画的一部分。
至于旋转动画;除非我严重记错了底层机制,否则独立层(那些不支持 View 的层(很可能是您创建的))不关心 UIView 动画上下文。相反,您可以使用核心动画级别 API 来为它们设置动画。这可以通过更改 CATransaction
中的属性来完成,也可以通过创建从一个角度到另一个角度的 CABasicAnimation
并将其添加到图层来完成。
请注意,添加动画不会改变“模型”值(层的属性),一旦动画完成,层将呈现为它在添加动画之前就完成了。如果图层需要为一个值设置动画并保持在那里,您将同时添加动画并更新图层属性。
关于ios - 在 func draw() 下的 UIBezier 路径的动画 CGAffineTransform(rotate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43131518/
如何将 CGAffineTransform 转换为 CGTransform3D? 我使用 UIImagePickerController 作为相机 Controller 。我在相机 View 的上部添
使用此命令时,我在标题中收到错误消息: CGPathContainsPoint(Hitbox.CGPath, self.transform, point, false) Hitbox 是一个 UIBe
我正在尝试使用 CGAffineTransformRotate 旋转基于触摸手势添加到父 View 上的自定义 View (VIEWA)。一切正常。现在,我在父 View 上添加了另一个 View (
我正在尝试在 Swift 中创建 CGPath。我正在使用 CGPathCreateWithRect(rect, transformPointer) . 我怎样才能得到 UnsafePointer来自
什么时候使用 CABasicAnimation 和 CAKeyFrameAnimation 和 CGAffineTransform? 最佳答案 CABasicAnimation :为图层属性提供基本的
我有这个功能可以将 UIButtons 旋转 45 度。但是一旦旋转,调用相同的方法不会再旋转,并且按钮在第一次旋转后卡在其旋转位置。有任何想法吗? - (void)rotateImage:(UIBu
在我的代码中,我有一个表格,在我的表格中,我有一个 slider ,我将其转换为垂直的。 metricSlider.transform = CGAffineTransformRotate(metric
在我的实验中,我得出以下结论: YourView.transform = CGAffineTransformMakeRotation( positive value ); 将顺时针旋转 View ,并
我尝试为 UILabel 设置动画: let label: UILabel = UILabel() var transform = CGAffineTransform.identity UIView.
问题: 当使用 CGAffineTransform 时,我失去了 UIView 及其所有 subview 的质量。 代码 我当前正在运行以下代码来缩放和移动我的 UIView。 func an
我有一个 ImageView ,我正在通过 UISliders 缩放和旋转它。这是我这样做的方法: - (IBAction)sizeSlider:(UISlider *)sender { in
我正在开发一个允许用户旋转时钟指针的应用程序。为此,我正在使用 needle 的 imageview 的 transform 属性: CGAffineTransform newTrans = CGAf
我刚刚意识到一些很奇怪的事情。使用 Xcode 5 中的 Storyboard,我创建了一个非常简单的应用程序;只有一个 View 的 View Controller 。在此 View 上有 slid
我正在对 UILabel 应用翻译,这应该导致标签在其开始的相同 x 位置结束,但由于某种原因它似乎卡在左边。 [UIView animateWithDuration:1 delay:0 usingS
我有一个实例方法,我想返回 CGAffineTransform。我目前收到错误 Semantic Issue: Initializing 'CGAffineTransform' (aka 'struc
IU 在 Java 方面经验丰富,但对 Objective C 还是个新手,所以这可能非常愚蠢。尽管如此,我已经苦苦挣扎了一段时间,从以下代码中寻找我得到预期表达式错误的原因。 CGAffineTra
我可能误解了 CGAffineTransform 的工作原理,但它似乎给出了关于框架原点的奇怪结果。 例如: print(attribute.frame) attrib
我在某个角度添加了 UIView。现在在运行时我想将该 View 向上移动(比如 20 像素)。 开始 dragView = [[DragbleView alloc] initWithFrame:C
我正在尝试缩放 AVCaptureVideoPreviewLayer,以便它显示来自相机的“放大”预览;我可以使用 setAffineTransform:CGAffineTransformMakeSc
我正在尝试编写代码,当触发发生时,UIImageView 的实例会创建一个缓慢的“增长”效果,CGAffineTransform 会运行 20 秒。 当触发器在第一次转换完成之前再次发生时,就会出现此
我是一名优秀的程序员,十分优秀!