2015-02-22 6 views
0

Мне нужно иметь возможность создавать и отображать UIView в определенном CGPoint.Как создать UIView в определенном CGPoint?

До сих пор у меня есть распознаватель жестов, который добавляется как подземелье к главному виду.

Затем я создаю 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) 

Что я делаю неправильно?

+0

Что вы имеете в виду с разными? Совсем другое место или рядом? – Christian

+0

Оказалось, что после более тщательного осмотра он создает вид с левым углом в положении крана. Я думаю, это координаты x + y крана. Как создать представление в непосредственной близости от центра. –

+0

Проверьте мой ответ. :) – Christian

ответ

3

Ваша проблема в том, что вы хотите, чтобы центр просмотра был точкой, которую вы нажали. На данный момент верхний левый угол вашего UIView будет точкой, к которой вы прикасались. Так что попробуйте:

var frameSize:CGFloat = 64 
animationImage.frame = CGRectMake(tappedLocation.x - frameSize/2, tappedLocation.y - frameSize/2, frameSize, frameSize) 

Как вы видите, теперь вы установите ширину и высоту до и отрегулировать й и у так, что центр вашей точки зрения является точкой вы соприкоснулись.

Но лучший способ, как сказал Роб, в своем ответе просто установить центр обзора в ваше местоположение. Таким образом, у вас есть только установить размер вашего кадра и использовать CGSizeMake вместо этого CGRectMake метода:

animationImage.frame.size = CGSizeMake(100, 100) 
animationImage.center = tappedLocation 
2

Просто установите его center:

animationImage.center = tappedLocation 
+0

Не знал об этом. Гораздо лучший способ, чем просто вычисление средней точки. +1 – Christian

0

Давайте создадим Tap Жест и назначить его к Просмотр

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 

}