开发者

Drag a UIImageView/UIView on 1 axis without having view.center jump to touch location (dragging from anywhere on view to move on x-axis)

I'm creating a draggable UIImageView much like the iPhone/iPod Touch's "Slide to Unlock" slider when the device is locked.

I can get the view to move smoothly along the x-axis by using: float newCenter = touchPoint.x;

But this doesn't take into account the offs开发者_运维技巧et of the touch from the center. It's simply moving the center point of the view to the touch point. I'm trying to move the view by dragging it from any point along the x-axis of the UIImageView.

Below, I tried calculating the newCenter within TouchesMoved but it fails to slide smoothly.

The code:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:self]; // self is a UIView

    CGRect sliderRect = sliderView.frame; // sliderView is a UIImageView

    if (CGRectContainsPoint(sliderRect, touchPoint)){

        float sliderHalfWidth = sliderView.frame.size.width / 2;
        float leftEdge = sliderView.center.x - sliderHalfWidth;
        float distanceToTouchFromEdge = touchPoint.x - leftEdge;

        float newCenter = (distanceToTouchFromEdge - sliderHalfWidth) + touchPoint.x; // <--- the math here is probably incorrect. I tried a few other formulas, none of which gave me the results I was looking for.
        //float newCenter = touchPoint.x;  <--- This slides smoothly but always centers view on touch-point (we want to drag from anywhere)

        NSLog(@"--------------");
        NSLog(@"sliderHalfWidth: %f", sliderHalfWidth);
        NSLog(@"sliderView.center.x: %f", sliderView.center.x);
        NSLog(@"leftEdge: %f", leftEdge);
        NSLog(@"distanceToTouchFromEdge: %f", distanceToTouchFromEdge);
        NSLog(@"touchPoint.x: %f", touchPoint.x);
        NSLog(@"newCenter: %f", newCenter);
        NSLog(@"--------------");

        sliderView.center = CGPointMake(newCenter, sliderView.frame.size.height/2);

    }
}

Any thoughts?


I ended up using a UISlider.

I found the post below, which is incredibly helpful if you're looking for the same solution.

It has a link to an xcode project with a fairly accurate recreation of Apple's native "Slide to Unlock" slider feature.

http://www.iphonedevsdk.com/forum/iphone-sdk-development/11470-there-way-i-can-use-slide-unlock-slider.html#post124686

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜