如何在某个 CGPoint 处创建 UIView?
How can I create a UIView at a certain CGPoint?
我需要能够在某个 CGPoint 处创建和显示 UIView。
到目前为止,我有一个手势识别器作为子视图添加到主视图。
然后我以编程方式创建一个 UIView,并将它的 x 和 y 坐标设置为我从手势识别器获得的 CGPoint。
我可以创建它并将其添加为子视图,但创建的 UIView 的位置与 TAP 的位置不同。
AnimationView 子类 UIView
我的代码如下
tappedLocation = gesture.locationInView(self.view)
var animationImage: AnimationView = AnimationView()
animationImage.frame = CGRectMake(tappedLocation.x, tappedLocation.y, 64, 64)
animationImage.contentMode = UIViewContentMode.ScaleAspectFill
self.view.addSubview(animationImage)
animationImage.addFadeAnimation(removedOnCompletion: true)
我做错了什么吗?
您的问题是,您希望视图的中心是您单击的点。此时 UIView
的左上角将是您触摸的点。所以试试看:
var frameSize:CGFloat = 64
animationImage.frame = CGRectMake(tappedLocation.x - frameSize/2, tappedLocation.y - frameSize/2, frameSize, frameSize)
如您所见,现在您设置了之前的宽度和高度,并调整了 x 和 y,使视图的中心是您触摸的点。
但更好的方法是,就像 Rob 在他的回答中提到的那样,将视图的中心设置为您的位置。这样你只需要设置框架的大小并使用 CGSizeMake
而不是 CGRectMake
方法:
animationImage.frame.size = CGSizeMake(100, 100)
animationImage.center = tappedLocation
只需设置其 center
:
animationImage.center = tappedLocation
让我们创建一个点击手势并将其分配给一个视图
let tapGesture = UITapGestureRecognizer()
tapGesture.addTarget(self, action: "tappedView:") // action is the call to the function that will be executed every time a Tap gesture gets recognised.
let myView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
myView.addGestureRecognizer(tapGesture)
每次您使用指定的点击手势点击视图时,都会调用此函数。
func tappedView(sender: UITapGestureRecognizer) {
// Now you ca access all the UITapGestureRecognizer API and play with it however you want.
// You want to center your view to the location of the Tap.
myView.center = sender.view!.center
}
我需要能够在某个 CGPoint 处创建和显示 UIView。
到目前为止,我有一个手势识别器作为子视图添加到主视图。
然后我以编程方式创建一个 UIView,并将它的 x 和 y 坐标设置为我从手势识别器获得的 CGPoint。
我可以创建它并将其添加为子视图,但创建的 UIView 的位置与 TAP 的位置不同。
AnimationView 子类 UIView
我的代码如下
tappedLocation = gesture.locationInView(self.view)
var animationImage: AnimationView = AnimationView()
animationImage.frame = CGRectMake(tappedLocation.x, tappedLocation.y, 64, 64)
animationImage.contentMode = UIViewContentMode.ScaleAspectFill
self.view.addSubview(animationImage)
animationImage.addFadeAnimation(removedOnCompletion: true)
我做错了什么吗?
您的问题是,您希望视图的中心是您单击的点。此时 UIView
的左上角将是您触摸的点。所以试试看:
var frameSize:CGFloat = 64
animationImage.frame = CGRectMake(tappedLocation.x - frameSize/2, tappedLocation.y - frameSize/2, frameSize, frameSize)
如您所见,现在您设置了之前的宽度和高度,并调整了 x 和 y,使视图的中心是您触摸的点。
但更好的方法是,就像 Rob 在他的回答中提到的那样,将视图的中心设置为您的位置。这样你只需要设置框架的大小并使用 CGSizeMake
而不是 CGRectMake
方法:
animationImage.frame.size = CGSizeMake(100, 100)
animationImage.center = tappedLocation
只需设置其 center
:
animationImage.center = tappedLocation
让我们创建一个点击手势并将其分配给一个视图
let tapGesture = UITapGestureRecognizer()
tapGesture.addTarget(self, action: "tappedView:") // action is the call to the function that will be executed every time a Tap gesture gets recognised.
let myView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
myView.addGestureRecognizer(tapGesture)
每次您使用指定的点击手势点击视图时,都会调用此函数。
func tappedView(sender: UITapGestureRecognizer) {
// Now you ca access all the UITapGestureRecognizer API and play with it however you want.
// You want to center your view to the location of the Tap.
myView.center = sender.view!.center
}