Я создаю перетаскиваемый 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);
}
}
Есть мысли?