使用缩放将UIScrollView滚动到某个位置

时间:2013-11-13 13:48:43

标签: ios iphone uiscrollview uiimageview zooming

我在UIScrollView中有一个UIImageView,在scrollView中启用了缩放功能。我想要的是如果用户放大图像的特定区域,然后返回,滚动视图将图像设置在任何地方。我尝试过使用内容偏移,但它并不适用于所有缩放级别。在缩放级别1的情况下,imageView类型粘在scrollView的左侧。这是我用来保存contentOffset和zoomScale的代码。

    -(void)saveContentOffset
{
    NSInteger zoomValue=[Scroll zoomScale];
    CGPoint offeset=[Scroll contentOffset];
    NSMutableDictionary *dict=[[NSMutableDictionary alloc] init];
    [dict setObject:[NSNumber numberWithInteger:offeset.x] forKey:@"X"];
    [dict setObject:[NSNumber numberWithInteger:offeset.y] forKey:@"Y"];
    [dict setObject:[NSNumber numberWithInteger:zoomValue] forKey:@"Zoom"];
    [[NSUserDefaults standardUserDefaults] setObject:dict forKey:@"Dict"];
}

此代码用于在用户返回屏幕时设置contentOffset:

-(void)setContentOffsetForScroll
{
    NSDictionary *dict=[[NSUserDefaults standardUserDefaults] objectForKey:@"Dict"];
    if ([dict allKeys]>0)
    {
        NSInteger xPoint=[[dict valueForKey:@"X"] integerValue];
        NSInteger yPoint=[[dict valueForKey:@"Y"] integerValue];
        NSInteger zoomScale=[[dict valueForKey:@"Zoom"] integerValue];
        CGPoint offsetPoint=CGPointMake(xPoint, yPoint);
        [Scroll setZoomScale:zoomScale];
        [Scroll setContentOffset:offsetPoint];
    }
}

在zoomLevel 1的情况下,请检查附图中的问题,使用greenColor的背景视图是ScrollView。在这种情况下,内容设置为左。

请说明我错过了什么。

谢谢!enter image description here

3 个答案:

答案 0 :(得分:0)

您可以使用此

保存图像视图的原点x = imageview.frame.origin.x和y = imageview.frame.origin.y

然后当你回到同一个视图时

使用它     CGRect * rect = imageview.frame;     rect.origin.x = x; //来自先前存储的值     rect.origin.y = y; //来自先前存储的值     imageview.frame = RECT;

答案 1 :(得分:0)

不要保存单独的X,Y和缩放参数。相反,请保存UIScrollView.bounds,然后将其传递给-[UIScrollView zoomToRect:animated:]

P.S。作为编码风格的问题,为了使您的代码对现有的Objective-C程序员可读,请不要使用大写字母作为变量名;它们用于类名。

答案 2 :(得分:0)

经过大量研究后,我发现了我正在做的错误。我使用整数值进行缩放比例,但是为了存储精度数据和精确值,我们需要使用浮点值。所以变化如下:

    -(void)saveContentOffset
{
    CGFloat zoomValue=[Scroll zoomScale];
    CGPoint offeset=[Scroll contentOffset];
    NSMutableDictionary *dict=[[NSMutableDictionary alloc] init];
    [dict setObject:[NSNumber numberWithInteger:offeset.x] forKey:@"X"];
    [dict setObject:[NSNumber numberWithInteger:offeset.y] forKey:@"Y"];
    [dict setObject:[NSNumber numberWithfloat:zoomValue] forKey:@"Zoom"];
    [[NSUserDefaults standardUserDefaults] setObject:dict forKey:@"Dict"];
}


-(void)setContentOffsetForScroll
{
    NSDictionary *dict=[[NSUserDefaults standardUserDefaults] objectForKey:@"Dict"];
    if ([dict allKeys]>0)
    {
        NSInteger xPoint=[[dict valueForKey:@"X"] integerValue];
        NSInteger yPoint=[[dict valueForKey:@"Y"] integerValue];
        NSInteger zoomScale=[[dict valueForKey:@"Zoom"] floatValue];
        CGPoint offsetPoint=CGPointMake(xPoint, yPoint);
        [Scroll setZoomScale:zoomScale];
        [Scroll setContentOffset:offsetPoint];
    }
}