0

scrollViewでズームが有効になっているUIScrollView内にUIImageViewがあります。私が欲しいのは、ユーザーが画像の特定の領域にズームインしてから戻ってきた場合、スクロールビューは画像が残っていた場所に設定されることです。コンテンツ オフセットを使用してみましたが、すべてのズーム レベルで機能するとは限りません。ズーム レベル 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

多くの調査の後、私が行っていたエラーを見つけました。zoom scale に整数値を使用していましたが、精度データと正確な値を格納するには、浮動小数点値を使用する必要があります。というわけで変更点は以下の通り。

    -(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 に答える
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 に答える