У меня есть подкласс UIView, который я хочу иметь возможность перемещать внутри своего суперпредставления. Когда пользователь касается UIView где-то за пределами self.center
, но внутри self.bounds
, он «прыгает», потому что я добавляю новое местоположение к self.center
, чтобы достичь фактического движения. Чтобы избежать такого поведения, я пытаюсь установить опорную точку, которая позволяет пользователю захватывать и перетаскивать вид в любое место в пределах его границ.
Моя проблема в том, что когда я вычисляю новую опорную точку (как показано в коде ниже), ничего не происходит, вид вообще не меняет положение. С другой стороны, если я установлю опорную точку в предварительно рассчитанную точку, я смогу переместить вид (но тогда, конечно, он «перескочит» в предварительно рассчитанную точку). Почему это не работает, как ожидалось?
Спасибо.
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
// Only support single touches, anyObject retrieves only one touch
UITouch *touch = [touches anyObject];
CGPoint locationInView = [touch locationInView:self];
// New location is somewhere within the superview
CGPoint locationInSuperview = [touch locationInView:self.superview];
// Set an anchorpoint that acts as starting point for the move
// Doesn't work!
self.layer.anchorPoint = CGPointMake(locationInView.x / self.bounds.size.width, locationInView.y / self.bounds.size.height);
// Does work!
self.layer.anchorPoint = CGPointMake(0.01, 0.0181818);
// Move to new location
self.center = locationInSuperview;
}