Если фигура прямоугольная, положение касания точно правильное. но если фигура содержит прозрачную область (например, треугольник ниже), когда пользователь нажимает на прозрачную область (это пустое место на экране), прикосновение также допустимо.
Когда на экране много фигур, пользователь может нажать на правильную позицию, но получить неправильную форму. Например, если пользователь хочет выбрать зеленый треугольник и коснуться красной точки, но выбранная фигура будет розовым треугольником, потому что zPosition розового треугольника выше зеленого треугольника, а позиция касания находится внутри прозрачной области розового треугольника.
Вот коды для создания формы в начале:
var touchShapeName:String!
var currShape: SKShapeNode!
var shapeArr = [SKShapeNode]()
создание фигур:
for i in 1...count {
let shape = SKShapeNode()
shape.path = petalPath
shape.strokeColor = UIColor(red: 0.9, green: 0.7, blue: 0.1, alpha: 1.0)
shape.lineWidth = 0.1
shape.glowWidth = 0.1
shape.fillColor = UIColor(red: getRandomColor(245, 255), green: getRandomColor(190, 210), blue: getRandomColor(10, 15), alpha: 0.98)
shape.name = "\(i)"
shape.position = CGPoint(x: frame.midX + CGFloat( 30 * i ), y:frame.midY + 60)
addChild(shape)
shapArr.append(shape)
}
Я использую следующие коды, чтобы получить форму:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
let location = touch?.location(in: self)
touchShapeName = self.atPoint(location!).name
if currShape == nil{
for s in shapeArr{
if s.name == touchShapeName{
currShape = s
}
}
}
}
Теперь фигуры можно создавать и перемещать, нажимая на цветную область. Проблема в том, что нажатие на фигуру с верхней прозрачной областью может привести к неправильной форме, как я объяснял выше.
Пишу ли я правильные коды? Есть ли другое решение, чтобы получить точную позицию?
Спасибо.