更新 UIView 会产生子视图对齐/Swift 的散列
Posted
技术标签:
【中文标题】更新 UIView 会产生子视图对齐/Swift 的散列【英文标题】:Updating UIView makes a hash of subview's alignment / Swift 【发布时间】:2015-06-30 18:27:55 【问题描述】:我是 Swift 的新手。我想制作一个带有移动子视图的应用程序。我正在测试应用程序,当我按下按钮时,子视图以正确的值移动,但是当父 UIView 由于更改标签而更新时,子视图跳回我在情节提要中设置的原点坐标。我用核心图形画圆。我想通过点击一个按钮来移动屏幕上的圆圈。我该如何解决这个问题?
class ViewController: UIViewController
@IBOutlet weak var movingItem: MovingItem! /* inheritance from UIView */
@IBAction func move()
self.movingItem.frame = CGRect(x: movingItem.frame.origin.x + 5.0,
y: movingItem.frame.origin.y,
width: movingItem.frame.width,
height: movingItem.frame.height)
override func viewDidLoad()
self.movingItem.frame = CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50.0)
self.movingItem.setNeedsDisplay()
//more code...
@IBDesignable
class MovingItem: UIView
override func drawRect(rect: CGRect)
var context = UIGraphicsGetCurrentContext()
CGContextBeginPath(context)
var rectForCircle = CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50.0)
CGContextAddEllipseInRect(context, rectForCircle)
UIColor.redColor().setFill()
CGContextDrawPath(context, kCGPathFill)
【问题讨论】:
【参考方案1】:尝试代替
var rectForCircle = CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50.0)
CGContextAddEllipseInRect(context, rectForCircle)
像这样:
CGContextAddEllipseInRect(context, self.frame)
并插入行
self.movingItem.setNeedsDisplay()
之后
self.movingItem.frame = CGRect(x: movingItem.frame.origin.x + 5.0,
y: movingItem.frame.origin.y,
width: movingItem.frame.width,
height: movingItem.frame.height)
【讨论】:
问题是一样的。当主 UIView 更新时,包含圆圈的子视图会跳回来。在 2 次更新之间,子视图正确移动,但是当 uiview 更新时,uiview 包含的子视图跳回原点坐标。顺便说一句,谢谢!以上是关于更新 UIView 会产生子视图对齐/Swift 的散列的主要内容,如果未能解决你的问题,请参考以下文章
使用 Swift 以编程方式将 UIView 中的标签和图像居中对齐