У меня есть довольно простой бит кода для перетаскивания и рисования.Перетаскивание представления в пределах представления, ограничение его в пределах
Три вида: вид корня - это в основном окно (с несколькими элементами управления интерфейсом). Внутри него у меня есть «холст». В представлении холста у меня есть третий вид (небольшая графика персонажа), которую пользователь должен «перетаскивать» в пределах холста. Перетаскивание отлично работает.
Проблема в том, что я не могу ограничить свой «характер» в пределах холста. В идеале, когда он сталкивается с краем холста, он должен остановиться (не перекинуться в корневой вид)
Подвид просмотра холста; поэтому он исчезает, как только он идет по краю, - но я не хочу, чтобы он исчез, я хочу, чтобы он не смог пойти дальше.
Я также называю CGRectIsWithinRect перед моей анимацией, что в принципе должно делать трюк. Проблема в том, что кадр персонажа не обновляется во время анимации - пока он уже движется, он будет продолжать двигаться вправо от страницы.
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UIView * charView = [[canvasView floatingView] retain];
CGPoint pt = [[touches anyObject] locationInView:canvasView];
if (CGRectContainsPoint([canvasView bounds], pt)) {
CGRect charFrame = charView.frame;
CGRect containerFrame = canvasView.frame;
BOOL inTheYard= CGRectContainsRect(containerFrame, charFrame);
if (inTheYard == NO) {
//if we're at the edge, don't go any further
return;
}
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:.2];
CGFloat x = floatingView.center.x + (pt.x - startPoint.x);
CGFloat y = floatingView.center.y + (pt.y - startPoint.y);
CGPoint middle = CGPointMake(x,y);
floatingView.center = middle;
[UIView commitAnimations];
[floatingView release];
}
}
Как я могу удержать его от перемещения мимо краев его надзора?