나는 화면 주위로 드래그하고자하는 요소가 UIView
입니다. 하지만 나는 그들의 중심이 항상 그들의 superview의 경계 안에 있어야한다는 것을 무엇이든 상관없이 원한다. 나는 UIPanGestureRecognizer와 나는 다음과 같이 경계가 확인하고 그들에게 추가 :경계를 드래그하면서 UIView의 중앙을 확인합니다.
-(void) dragInProgress : (UIPanGestureRecognizer *) recognizer
{
if ([self.delegate hallElement:self shouldMove:recognizer])
{
CGPoint translation = [recognizer translationInView:self.view.superview];
CGPoint currentCenter = self.view.center;
CGFloat maxX = self.view.superview.bounds.size.width;
if (currentCenter.x + translation.x < 0)
{
translation.x = (0 - currentCenter.x);
}
if (currentCenter.x + translation.x >= maxX)
{
translation.x = (maxX - currentCenter.x - 1);
}
CGFloat maxY = self.view.superview.bounds.size.height;
if (currentCenter.y + translation.y < 0)
{
translation.y = (0 - currentCenter.y);
}
if (currentCenter.y + translation.y >= maxY)
{
translation.y = (maxY - currentCenter.y - 1);
}
[recognizer setTranslation:translation inView:self.view.superview];
CGPoint translationInViewCoordiateSystem = [recognizer translationInView:self.view];
self.view.transform = CGAffineTransformTranslate(self.view.transform, translationInViewCoordiateSystem.x , translationInViewCoordiateSystem.y );
[recognizer setTranslation:CGPointZero inView:self.view];
}
}
그러나이 바운드 검사가 최상의 경우에 작동하지 않는 경우, 일반적으로 이상한 행동을 초래한다. 센터가 수퍼 뷰 범위 내에 머물도록하려면 어떻게해야합니까?
는 "이상한 행동을"제발 정의합니다. 당신은 당신이보고 싶은 것을 말했지만, 당신은 무엇을보고 있습니까? 당신의 논리는 나에게 좋아 보인다. – occulus
게시 한 코드 뒤에 오는 것은 무엇입니까? 게시 된 코드는 어떤 맥락에서 존재합니까? 어떤 방법입니까? – occulus
@ coculus : 이상한 행동은 때로는 바운더리 검사만으로 화면의 중심에 있지만 가장자리에 가깝지는 않지만 특정 방향으로보기를 움직일 수 있다는 것입니다. 이 코드는 UIPanGestureRecognizer의 처리기 안에 있습니다. 메서드의 끝에, 모든 계산이 완료된 후 계산 된 변환으로 내 뷰의 변환을 변환 한 다음 변환을 다시 0으로 다시 설정합니다. –