是否有命令获取对象的x / y坐标?另外,无论如何都要获得屏幕中心的坐标?
我正在尝试使用NSTimer
每秒添加一个CircleView
,但它会意外崩溃。
var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector(view.addSubview(circleView)), userInfo: nil, repeats: true)
这是传递给circleView
的{{1}}:
Selector(view.addSubview(circleView))
它崩溃了:
var circleWidth = CGFloat(200)
var circleHeight = circleWidth
// Create a new CircleView
var circleView = CircleView(frame: CGRectMake(200, 0, circleWidth, circleHeight))
答案 0 :(得分:2)
首先,是的,您可以轻松获得任何x
的{{1}} / y
位置;它也很容易获得屏幕中心的坐标。
UIView
的位置(在UIView
的坐标系中)位于:
superview
注意: view.frame.origin
位于origin
的左上角。
屏幕中心可以这样确定:
UIView
您可能希望let screenBounds = UIScreen.mainScreen().bounds
let centerOfScreen = CGPoint(x: CGRectGetMidX(screenBounds), y: CGRectGetMidY(screenBounds))
的中心重新添加新视图,但这几乎相同,只需将UIView
替换为UIScreen.mainScreen().bounds
(view.bounds
是您view
添加新视图的地方。
其次,你的计时器崩溃了,因为你给它一个无效的UIView
。你不能通过直接传递函数来创建Selector
,你需要传递一个Selector
,其中包含你想要它指向的函数的名称。当你这样做时:
String
您实际上是立即调用Selector(view.addSubview(circleView))
并将其返回的值传递给view.addSubview(circleView)
。由于Selector
返回addSubview
,您实际上创建的Void
指向Selector
,这是无效的。当nil
触发时,它会尝试拨打NSTimer
nil
并崩溃。
执行代码尝试的正确方法是创建一个新功能,添加Selector
并将该功能的名称传递给CircleView
:
Selector
然后像这样设置func addCircleView() {
var circleWidth = CGFloat(200)
var circleHeight = circleWidth
// Create a new CircleView
var circleView = CircleView(frame: CGRectMake(200, 0, circleWidth, circleHeight))
view.addSubview(circleView)
}
:
NSTimer
注意:您实际上并不需要var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("addCircleView"), userInfo: nil, repeats: true)
Selector
,Swift会发现您需要"addCircleView"
在那里并自动将字符串文字转换为它。