Перетащите UIImageView / UIView на 1 ось без перехода view.center к месту прикосновения (перетаскивание из любого места на виде для перемещения по оси X) - PullRequest
0 голосов
/ 22 февраля 2010

Я создаю перетаскиваемый UIImageView, очень похожий на слайдер «Slide to Unlock» iPhone / iPod Touch, когда устройство заблокировано.

Я могу заставить вид плавно перемещаться вдоль оси x, используя: float newCenter = touchPoint.x;

Но это не учитывает смещение касания от центра. Это просто перемещение центральной точки обзора в точку касания. Я пытаюсь переместить вид, перетаскивая его из любой точки вдоль оси x UIImageView.

Ниже я попытался вычислить новый центр в пределах TouchesMoved , но он не может плавно скользить.

код:

- (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);

    }
}

Есть мысли?

1 Ответ

0 голосов
/ 22 февраля 2010

Я использовал UISlider.

Я нашел пост ниже, который невероятно полезен, если вы ищете то же решение.

Он имеет ссылку на проект xcode с довольно точным воспроизведением нативной функции слайдера Apple «Slide to Unlock».

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

...