- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试围绕其中心点旋转 CAShapeLayer。我对边界、框架、 anchor 和中心点感到非常困惑。
我在 UIView 中创建了一个圆形 CAShape,并希望围绕其中心旋转它。我只包含了部分代码。
创建我想要旋转的圆的函数:
func drawCompassImage(){
//Compass Bezel Ring
let baseCirclePath = UIBezierPath()
baseCirclePath.addArcWithCenter(CGPoint(x: CGFloat(self.frame.width/2), y: CGFloat(self.frame.width/2)), radius: CGFloat(baseCircleRadius), startAngle: CGFloat(-M_PI_2), endAngle:CGFloat(M_PI_2*3), clockwise: true)
compassImage.path = baseCirclePath.CGPath
compassImage.fillColor = UIColor.clearColor().CGColor;
compassImage.strokeColor = UIColor.whiteColor().CGColor
compassImage.lineDashPattern = [1.0,2.0]
compassImage.lineWidth = 10.0
self.layer.addSublayer(compassImage)
}
创建红点的函数:
func drawCompassRedDot() {
let compassBall = CAShapeLayer ()
let compassBallPath = UIBezierPath ()
let compassBallRadius :CGFloat = 5
let xStart: Float = Float(Float(baseCircleRadius) * cos(270 * Float(M_PI) / 180)) + Float(self.frame.width/2)
let yStart: Float = Float(Float(baseCircleRadius) * sin(270 * Float(M_PI) / 180)) + Float((self.frame.height/2)+0)
compassBallPath.addArcWithCenter(CGPoint(x: CGFloat(xStart), y: CGFloat(yStart)), radius: compassBallRadius, startAngle: CGFloat(-M_PI_2), endAngle:CGFloat(M_PI_2*3), clockwise: true)
compassBall.path = compassBallPath.CGPath
compassBall.fillColor = UIColor.redColor().CGColor;
compassBall.strokeColor = UIColor.redColor().CGColor
compassBall.lineWidth = 1.0
self.compassImage.addSublayer(compassBall)
}
旋转函数:
func animate(){
compassImage.transform = CATransform3DMakeRotation(degree2radian(45), 0, 0, 1)
}
func degree2radian(a:CGFloat)->CGFloat {
let b = CGFloat(M_PI) * a/180
return b
}
我的问题是,无论我尝试什么,它总是以偏移结束:
两个圆应具有相同的圆心。
请帮忙,这让我很疯狂......
最佳答案
我已经解决了。需要正确添加边界和 anchor :
compassImage.frame = bounds
compassImage.anchorPoint = CGPoint(x: 0.5, y: 0.5)
因此代码如下所示:
func drawCompassImage(){
//Compass Bezel Ring
let baseCirclePath = UIBezierPath()
baseCirclePath.addArcWithCenter(CGPoint(x: CGFloat(self.frame.width/2), y: CGFloat(self.frame.width/2)), radius: CGFloat(baseCircleRadius), startAngle: CGFloat(-M_PI_2), endAngle:CGFloat(M_PI_2*3), clockwise: true)
compassImage.path = baseCirclePath.CGPath
compassImage.frame = bounds
compassImage.anchorPoint = CGPoint(x: 0.5, y: 0.5)
compassImage.fillColor = UIColor.clearColor().CGColor;
compassImage.strokeColor = UIColor.whiteColor().CGColor
compassImage.lineDashPattern = [1.0,2.0]
compassImage.lineWidth = 10.0
self.layer.addSublayer(compassImage)
}
关于ios - CAShapeLayer 让我发疯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37767336/
我使用的是 C# 3.5 和 VS 2010 旗舰版。 我正在优化(为了提高速度)具有四个嵌套 for 循环的机器学习算法。我发现一个简单的缓存(一个对象的张量)可能会极大地提高性能,因为有很多相同对
所以我有一个输入文件,其中包含以下文本(每行=用户): 012345678;danny;cohen;22;M;danny1993;123;1,2,4,8;Nice person 223325222;o
我不知道这里发生了什么。我做了一个简单的应用程序,它有一个成员类。 这是我的代码,其行为符合预期。这里没什么好看的。主类使用构造函数初始化成员类并调用成员方法。 @Override protected
看看我的新闻滚筒: LIVE DEMO 一切正常,直到您将 scipt 留在选项卡中几分钟。 正在发生的事情看起来像是浏览器每 5 秒丢失一次计数并且不断执行操作。 我猜它与setTimeout有关。
我在一周的大部分时间里都在尝试这样做,但仍然没有成功。 我有一个带有选项卡的操作栏(操作栏 sherlock),我可以在选项卡之间切换并更改 fragment 。 每个 fragment 都有一个 w
我正在使用名为 Raylib 的库开发桌面应用程序,对于那些不知道 Raylib 是什么的人来说,它是一个用于制作游戏的开源渲染 API。默认情况下,Raylib 不允许您调整大小或最大化为窗口。为了
我是一名优秀的程序员,十分优秀!