我在数组中有 8 张图片,UIImageView
一次显示数组中的一张图片。我还在 UIImageView
上安装了 UIPanGestureRecognizer
,因此当用户在图像上横向移动手指时,它会发生变化(类似于图像顶部的不可见滚动条)。我正在使用平移手势的平移值来更改图像。这一切都有效,但不是我想要的方式。图像变化太快,只需短指平移即可滚动浏览图像。有没有办法需要更长的平移来改变图像?或者任何其他方式让用户“更顺畅”?
.h
@interface FirstViewController : UIViewController
@property (nonatomic, retain) IBOutlet UIImageView *imageView;
- (IBAction)pan:(UIGestureRecognizer *)panGesture;
.m
@interface FirstViewController () {
NSArray * imageArray;
int _currentIndex;
}
@end
@implementation FirstViewController
- (IBAction)pan:(UIPanGestureRecognizer *)panGesture {
// NSLog(@"panned");
CGPoint translation = [panGesture translationInView:self.view];
[self.panLabel setText: NSStringFromCGPoint(translation)];
NSLog(@"%@ translation", NSStringFromCGPoint(translation));
if (translation.x<-1) {
_currentIndex=(_currentIndex<=0)?0:_currentIndex-1;
UIImage *img = [UIImage imageNamed:[imageArray objectAtIndex:_currentIndex]];
[self.imageView setImage:img];
}
else if(translation.x>1){
_currentIndex=(_currentIndex>=7)?7:_currentIndex+1;
UIImage *img = [UIImage imageNamed:[imageArray objectAtIndex:_currentIndex]];
[self.imageView setImage:img];
}
[panGesture setTranslation:CGPointZero inView:self.view];
}
- (void)viewDidLoad {
[super viewDidLoad];
imageArray = [[NSArray alloc]
initWithObjects:@"image1.jpg", @"image2.jpg", @"image3.jpg", @"image4.jpg", @"image5.jpg", @"image6.jpg", @"image7.jpg", @"image8.jpg", nil];
}
最佳答案
您可以修改代码以随时间跟踪 X 平移。这将允许您为平移量设置一个变量。修改后的代码如下:
@interface FirstViewController () {
NSArray * imageArray;
int _currentIndex;
CGFloat _currentPanXAmount;
CGFloat _panThreshold;
}
@end
@implementation FirstViewController
- (IBAction)pan:(UIPanGestureRecognizer *)panGesture {
CGPoint translation = [panGesture translationInView:self.view];
_currentPanXAmount += translation.x;
[self.panLabel setText: NSStringFromCGPoint(translation)];
NSLog(@"%@ translation", NSStringFromCGPoint(translation));
if (_currentPanXAmount < (-1 * _panThreshold)) {
_currentIndex=(_currentIndex<=0)?0:_currentIndex-1;
UIImage *img = [UIImage imageNamed:[imageArray objectAtIndex:_currentIndex]];
[self.imageView setImage:img];
_currentPanXAmount = 0.0;
}
else if(_currentPanXAmount > _panThreshold){
_currentIndex=(_currentIndex>=7)?7:_currentIndex+1;
UIImage *img = [UIImage imageNamed:[imageArray objectAtIndex:_currentIndex]];
[self.imageView setImage:img];
_currentPanXAmount = 0.0;
}
[panGesture setTranslation:CGPointZero inView:self.view];
}
- (void)viewDidLoad {
[super viewDidLoad];
imageArray = [[NSArray alloc]
initWithObjects:@"image1.jpg", @"image2.jpg", @"image3.jpg", @"image4.jpg", @"image5.jpg", @"image6.jpg", @"image7.jpg", @"image8.jpg", nil];
// Make this larger for slower transitions and smaller for faster transitions.
_panThreshold = 10.0;
}
关于ios - 根据 UIPanGestureRecognizer 翻译值更改 UIImageView 中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13881144/