У меня есть довольно простой код для перетаскивания и рисования.
Три вида: Корневой вид - это в основном окно (с несколькими элементами управления интерфейсом).
В этом у меня есть представление "холста". В рамках холста у меня есть третий вид (небольшой рисунок персонажа), который пользователь должен «перетаскивать» внутри холста. Перетаскивание работает отлично.
Проблема в том, что я не могу ограничить свой «характер» в рамках холста. В идеале, когда он сталкивается с краем холста, он должен остановиться (не перетекать в корневой вид)
Холст, просмотр клипов, подпредставлений; поэтому он исчезает, как только переходит границу, но я не хочу, чтобы он исчез, я хочу, чтобы он не мог идти дальше.
Я также вызываю 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];
}
}
Как я могу помешать ему пройти через границы своего супервизии?