0

다음 질문에 대해서는 아래 이미지를 참조하십시오. 보이는 파란색과 주황색 원은 UIView입니다. UIPanGestureRecognizer가있는 청색 UIView를 드래그하여 주황색 원을 그에 따라 변환하고 지금처럼 파란색 원에서 같은 거리를 유지하고 싶습니다. 의미, 파란색 원을 아래로 드래그하면 주황색 UIView는 파란색 원과 평행을 유지해야하며 아래로 번역해야합니다. 파란색 원을 오른쪽으로 끌면 주황색 원도 오른쪽으로 변환되어야하고 은 파란색 원에서 동일한 거리를 유지해야합니다.다른 UIView를 드래그하여 UIView 번역

Image

그래서 지금 원은 그들에 UIPanGestureRecognizer이 같은 클래스의 일부이다. 다음은 이러한 뷰를 드래그하는 코드입니다 :

self.delta = [p translationInView:newView.superview];

다음 UIPanGestureRecognizer 클래스 내에서

-(void)dragging:(UIPanGestureRecognizer *)p { 


UIView *newView = p.view; 
if (p.state == UIGestureRecognizerStateBegan) { 
    self.origC = newView.center; 
} 
self.delta = [p translationInView:newView.superview]; 
CGPoint c = self.origC; 

c.x +=self.delta.x; 
c.y +=self.delta.y; 

newView.center = c; 

[self.delegate refreshView]; 
} 

가, 내가 사용하여 지정된 뷰의 좌표 시스템에서 팬 제스처의 번역을 얻을 수 있어요

이것이 제가 오렌지색 원의 번역을 신청하는 데 필요한 델타라고 생각합니다.하지만 어떻게 할 것인지는 잘 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다. 고맙습니다!

+0

'델타'를 다른보기 센터에도 추가 할 수 없습니까? –

+0

따라서 두보기는 다른 UIView (자주색 배경으로 표시됨)의 하위보기로 추가됩니다. 그 superview에서'drawRect :'내에서 다음과 같이 델타를 다른 뷰의 중심에 추가하려고했습니다 : 'self.fp2.center = CGPointMake (self.fp2.center.x + self.deltaDrag.x, self. fp2.center.y + self.deltaDrag.y); 이렇게하면 파란색보기의 첫 번째 끌기에서 주황색보기가 창 밖으로 날아갑니다. – DanielRak

+0

주황색보기 또는 현재 중심의 원래 중심점에 델타를 추가합니까? 델타는 시간이 지남에 따른 총 변환입니다. –

답변

0

직접 드래그 한 지점에서 수행하는 것과 똑같이하십시오.

if (p.state == UIGestureRecognizerStateBegan) { 
    self.origC = newView.center; // your code 
    self.origD = otherView.center; // new code 
} 
CGPoint c = self.origC; // your code 
c.x +=self.delta.x; // your code 
c.y +=self.delta.y; // your code 
newView.center = c; // your code 
CGPoint d = self.origD; // new code 
d.x +=self.delta.x; // new code 
d.y +=self.delta.y; // new code 
otherView.center = d; // new code 
+0

매트, 고마워요! 당신은 약간의 실수를 저질렀지 만, 다른 사람들이 필요로 할 때를 대비하여 대답을 편집했습니다. 너는 큰 도움이되었다. 고마워! – DanielRak

0

내 이해에 따라 붙여 넣은 코드는 "한 줄 코드"방식으로 찾으려는 경우에도 적합합니까? 나는 이런 식으로 당신이 무엇을 찾고 있는지 추측합니다.

orangeView.transform = CGAffineTransformMakeTranslation(delta.x,delta.y); 
관련 문제