Как я могу создать 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)

Есть ли что-то, что я делаю неправильно?


person Alex Catchpole    schedule 22.02.2015    source источник
comment
Что вы имеете в виду под разными? Совсем другое место или рядом?   -  person Christian    schedule 22.02.2015
comment
Оказывается, при ближайшем рассмотрении он создает вид с левым углом в месте касания. Я предполагаю, что это координаты x + y крана. Как сделать так, чтобы вид появлялся прямо в центре тапа.   -  person Alex Catchpole    schedule 22.02.2015


Ответы (3)


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

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

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

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

animationImage.frame.size = CGSizeMake(100, 100)
animationImage.center = tappedLocation
person Christian    schedule 22.02.2015

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

animationImage.center = tappedLocation
person Rob Napier    schedule 22.02.2015
comment
Не знал об этом. Гораздо лучший способ, чем просто вычисление средней точки. +1 - person Christian; 22.02.2015

Давайте создадим жест касания и назначим его представлению.

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

}
person leonardo    schedule 22.02.2015