2013-11-13 2 views
0

У меня есть UIImageView внутри UIScrollView с масштабированием, включенным в scrollView. Я хочу, чтобы пользователь увеличил масштаб изображения в определенном регионе изображения, а затем вернулся, вид прокрутки устанавливает изображение, где бы он ни находился. Я попытался использовать смещение содержимого, но он не работает для всех уровней масштабирования. В случае уровня масштабирования 1 изображение вида выглядит слева от scrollView. Это код, который я использовал для сохранения contentOffset и zoomScale.Прокрутка UIScrollView до определенной позиции с масштабированием

-(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, вид на background with greenColor - ScrollView. В этом случае содержимое устанавливается влево.

Пожалуйста, сообщите, что именно мне не хватает.

Спасибо! enter image description here

+0

Каков результат вашего кода? –

ответ

0

после много исследований, я нашел ошибку, которую я делал. Я использовал целочисленное значение для масштабирования, но для хранения данных точности и точного значения нам нужно использовать значение float. Таким образом, изменения следующие:

-(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]; 
    } 
} 
0

Вы можете использовать этот

Сохранить происхождение вашего Просмотр изображения в х = imageview.frame.origin.x и у = imageview.frame.origin.y

Затем, когда вы вернетесь на то же самое вид

использовать этот CGRect * rect = imageview.frame; rect.origin.x = x; // из ранее сохраненного значения rect.origin.y = y; // из ранее сохраненного значения imageview.frame = rect;

0

Не сохраняйте отдельные параметры X, Y и Zoom. Вместо этого сохраните UIScrollView.bounds и затем передайте его -[UIScrollView zoomToRect:animated:].

P.S. В качестве стиля кодирования, чтобы сделать ваш код доступным для существующих программистов Objective-C, не используйте заглавные буквы для имен переменных; они используются для имен классов.