iOS - рушится анимированный UISlider
Я хочу создать разваливающийся анимированный UISlider. По сути, ползунок будет размером с изображение большого пальца, пока к нему не дотронутся, и в этот момент он расширяется до полного размера во время его изменения. После изменения значения и отпускания ползунка ползунок вернется к исходному размеру (размеру большого пальца).
Я пытался работать с прикосновениями Bean и touchesEnd, но это не сильно меня задело.
До сих пор я подкласс UISlider и переопределил beginTrackingWithTouch и endTrackingWithTouch. Этот код выполняет эффект свертывания (конечно, без анимации), но ползунок больше не меняется. Есть идеи, как лучше всего это сделать?
#import "CollapsingUISlider.h"
@implementation CollapsingUISlider
/*-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width * 4.0f, self.frame.size.height);
[super touchesBegan:touches withEvent:event];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
// self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width * 0.25f, self.frame.size.height);
[super touchesEnded:touches withEvent:event];
}*/
-(BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, 400, self.frame.size.height);
return YES;
}
-(void)endTrackingWithTouch:(UITouch*)touch withEvent:(UIEvent *)event {
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, 20, self.frame.size.height);
}
-(BOOL) continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, 400, self.frame.size.height);
return self.tracking;
}
@end
1 ответ
Решение
В итоге я сделал что-то вроде этого:
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[platformView addGestureRecognizer:panRecognizer];
-(void)move:(id)sender {
[self.view bringSubviewToFront:[(UIPanGestureRecognizer*)sender view]];
CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.view];
if ([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
firstX = [[sender view] center].x;
firstY = [[sender view] center].y;
}
translatedPoint = CGPointMake(firstX, firstY+translatedPoint.y);
[[sender view] setCenter:translatedPoint];
if (platformView.center.y < platformCenter.y - offset) {
platformView.center = CGPointMake(platformCenter.x,platformCenter.y-offset);
((UIPanGestureRecognizer*)sender).enabled = NO;
} else if (platformView.center.y > platformCenter.y) {
platformView.center = CGPointMake(platformCenter.x,platformCenter.y);
((UIPanGestureRecognizer*)sender).enabled = NO;
}
}