我试图建立一个GestureRecognizer
拖动UIView
从右到左。 如果用户拖动查看屏幕的一半,视图将被自动拖入左上角放弃它,但如果用户不拖长达半个屏幕将返回到屏幕的右角。 这里有点失落,任何教程什么的? 谢谢
编辑:下面有一些代码,它是一个UIImageView
,一个里面UIScrollView
,我需要拖动整个滚动或只图像里面:
_myScroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.window.bounds.size.width, self.window.bounds.size.height)]; [_myScroll setContentSize:CGSizeMake(self.window.bounds.size.width , 1300)];
_tutorial = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.window.bounds.size.width, 1300)]; [_tutorial setImage:[UIImage imageNamed:@"Default"]];
_tutorial.contentMode = UIViewContentModeScaleAspectFit; [_myScroll addSubview:_tutorial];
_tutorial.userInteractionEnabled = YES;
UIPanGestureRecognizer * recognizer = [[UIPanGestureRecognizer alloc]initWithTarget:_tutorial action:@selector(handlePan:)];
[_tutorial addGestureRecognizer:recognizer];
[self.window addSubview:_myScroll];
和方法我尝试拖动UIImageView
- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:_myScroll];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:_myScroll];
}
看看在这里 。 这是一个UIGestureRecognizer
教程,这将给你的基础知识处理捏和平移手势。 一旦你学会的基础知识,这是很容易做到你想要什么。 所有你需要的是检查视图的位置,一旦锅完成将其发送到正确的位置。 看看这个其他教程上UIScrollViews
,它可以帮助您找到通过的第二部分你的方式。
这两个教程来自raywenderlich.com ,可能是最有用的iOS教程网站,我知道了。
这里是你的一些代码handlePan:
方法,你可以工作:
- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:_myScroll];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
if (recognizer.state == UIGestureRecognizerStateEnded) {
// Check here for the position of the view when the user stops touching the screen
// Set "CGFloat finalX" and "CGFloat finalY", depending on the last position of the touch
// Use this to animate the position of your view to where you want
[UIView animateWithDuration: aDuration
delay: 0
options: UIViewAnimationOptionCurveEaseOut
animations:^{
CGPoint finalPoint = CGPointMake(finalX, finalY);
recognizer.view.center = finalPoint; }
completion:nil];
}
[recognizer setTranslation:CGPointMake(0, 0) inView:_myScroll];
}
我不会在这里给你完美的答案,你就必须对代码工作,以找到一种方法,让你想让它发挥作用。
这是最后一个提示。 您可以通过使用slideFactor做一些“平滑”的动画。 这将帮助你的动画更加“现实”。 在此代码的工作,你就在“如果”的开头添加:
CGPoint velocity = [recognizer velocityInView:self.view];
CGFloat magnitude = sqrtf((velocity.x * velocity.x) + (velocity.y * velocity.y));
CGFloat slideMult = magnitude / 200;
float slideFactor = 0.1 * slideMult; // Increase for more slide
然后在UIView的animateWithDuration:
使用slideFactor
的持续时间。