0

我在 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 。在这种情况下,内容设置为 left 。

请建议我到底缺少什么。

谢谢!在此处输入图像描述

4

3 回答 3

0

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

PS 作为编码风格,为了让现有的 Objective-C 程序员可以阅读你的代码,不要使用大写字母作为变量名;它们用于类名。

于 2013-11-14T10:34:27.373 回答
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;

于 2013-11-13T17:00:01.637 回答
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];
    }
}
于 2013-11-19T09:24:12.093 回答