2012-05-01 2 views
0

단추의 드래그 경로를 제한하여 원하는 지점에서 화면 중앙으로 끌 수있는 방법은 무엇입니까?대각선 경로로 UIButton 드래그 제한

저는 UIButton의 현재 위치와 중심 좌표를 알고 있습니다. 드래그 이벤트에 대한 현재 x 및 y 수식이 필요합니다.

답변

2

이 그것을 수행해야합니다 같은

0

끌기 이벤트에 조건을 넣습니다. 원하는 지점으로 드래그하면 이동하십시오. 그렇지 않으면 아무 것도하지 않습니다.

if ((oldX - newX) < oldX && (oldY - newY) < oldY) { 
    updatePosition(newX, newY); 
} 
+0

코드 측면에서 @ 기호가 필요한 지점으로 끌면 무엇이 있습니까? 그것이 내 질문이다. –

0

당신은 의미합니까. 드래그의 시작 위치를 저장하고 각 이동 이벤트에서 현재 위치를 가져옵니다. 이 함수에 전달하십시오. 버튼의 프레임에 적용 할 수있는 벡터에 응답합니다.

계산의 요지는 드래그 (x 또는 y)의 최소 구성 요소를 선택하고 두 치수 모두에서 동일한 크기의 벡터에 응답하여 크기를 결정하는 것입니다 (두 축의 부호 유지). 이 같은

// answer a vector to apply to an object's frame, constrained to a diagonal 
- (CGPoint)constrainToDiagonalFrom:(CGPoint)from to:(CGPoint)to { 

    CGPoint diff = CGPointMake(to.x-from.x, to.y-from.y); 
    CGFloat magnitude = MIN(fabs(diff.x), fabs(diff.y)); // this is how large the drag will be 
    return CGPointMake(copysignf(magnitude, diff.x), copysignf(magnitude, diff.y)); 
} 

전화를 :

// on touches moved 
// we saved startPoint on touches began 
// get location from this event's touches 

CGPoint diagonal = [self constrainToDiagonalFrom:startPoint to:location]; 
myButton.frame = CGRectOffset(myButton.frame, diagonal.x, diagonal.y); 

당신은 크기 계산 .. 가장 큰 구성 요소, 최소, 평균, 등만큼 결과는 두 차원에서 대칭으로 주변에 속일 수 있습니다.