如何在某个CGPoint上创建UIView?

时间:2015-02-22 16:20:39

标签: ios swift uiview 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)

我有什么问题吗?

3 个答案:

答案 0 :(得分:3)

您的问题是,您希望视图的中心是您点击的点。目前,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

答案 1 :(得分:2)

只需设置center

即可
animationImage.center = tappedLocation

答案 2 :(得分:0)

让我们创建一个Tap Gesture并将其分配给View

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)

每次使用指定的Tap Gesture点击视图时,都会调用此函数。

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

}