2012-05-25 56 views
0

我有一个UIImageView元素作为我的主UIScrollView元素的子视图。 我希望图像始终填满整个屏幕,但我可以拖动边缘太远,以便黄色的“背景”变得可见。 如果我抬起手指,图像会“反弹”并正确填充屏幕。UIScrollView - 阻止UIImageView作为UIScrollView的子视图被拖出屏幕

我想阻止这种拖动图像的屏幕。 但是我确实希望图像一旦从“安全区域”拖出就会反弹回来。

这是我的滚动型初始化:

- (id)initWithFrame:(CGRect)frame{ 
self = [super initWithFrame:CGRectMake(0, 0, frame.size.height, frame.size.width)]; 
if (self) { 
    [self initImageValues]; 

    self.showsVerticalScrollIndicator = NO; 
    self.showsHorizontalScrollIndicator = NO; 
    self.bouncesZoom = YES; 
    self.decelerationRate = UIScrollViewDecelerationRateFast; 
    self.delegate = self; 
    self.backgroundColor = [UIColor yellowColor]; 
    self.minimumZoomScale = 1.0; 
    self.maximumZoomScale = 2.0; 
    [self setCanCancelContentTouches:YES]; 
    self.clipsToBounds = YES; 

    // Load Image 
    imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]]; 
    [self addSubview:imageView]; 

    [self setContentSize: CGSizeMake(imageView.frame.size.width, imageView.frame.size.height)]; 

    // Set bigger "bounce" zone (safety area) 
    self.contentInset=UIEdgeInsetsMake(-SAFETY_ZONE,-SAFETY_ZONE,-SAFETY_ZONE,-SAFETY_ZONE); 

    self.scrollEnabled = YES; 

} 
return self;} 

回答

2

使用这些委托方法:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 

ŧ如果偏离“安全区域”,则读取偏移量并返回。

可能是你需要从其他的UIScrollView的委托方法,虽然,但像这样的解决办法应该解决您的问题:)

+0

这正是我所错过的。我现在已经包含了一些if检查图像是否会离开屏幕,然后设置图像位置,以便图像在屏幕上显示。再加上反弹仍然有效。很好,谢谢! – Mauin

+0

没问题,祝你的项目好运! –

0

尝试其bounces属性设置为NO

+0

我有点想那反弹,当我离开了图像的“安全区”。我只是不希望“反弹”是那么大,我可以将图像拖出屏幕。 – Mauin

0

试穿滚动视图设置反弹:

self.bounces = NO; 
+0

好的,反弹转向解决了问题。但是当我离开我的图像“安全区域”时,我有点想要反弹。我只是不希望能够拖动图像到目前为止,它会离开屏幕的一部分。 – Mauin

0

试试这个: **

self.scrollView.maximumZoomScale = 1.0; 
self.scrollView.minimumZoomScale = 1.0; 

**

+0

这不起作用。我不确定图像的比例在拖动图像时如何影响“反弹”。 此方法也无法缩放图像。 – Mauin