2017-08-03 113 views
0

我有一個應用程序,我有一個UIScrollView TheoryViewController640 x 9000保存UIScrollView位置並在應用程序再次打開時恢復。 (Objective-C)

看到,因爲它是如此多的內容,我希望用戶能夠關閉該視圖(TheoryViewController),(或退出應用程序),當他們重新啓動應用程序並打開TheoryViewController,我想要的ScrollView位置再次處於最後位置。

我已經尋找了幾個選項,但他們已被棄用或在Swift中。

我正在運行Xcode 8並定位iOS 8 SDK。

+0

的可能的複製[NSUserDefaults的 - 保存的UIImageView位置](https://stackoverflow.com/questions/17383897/nsuserdefaults-saving-uiimageview-position) – the4kman

+0

你究竟嘗試了什麼? –

回答

1

contentOffset保存在NSUserDefaults中。然後當視圖再次出現時,使用setContentOffset()滾動到該位置。

// Save. 
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults setObject:NSStringFromCGPoint(self.scrollView.contentOffset) forKey:@"scrollViewOffset"]; 

... somewhere else in your code ... 

// Restore. 
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; 
CGPoint offset = CGPointFromString([userDefaults objectForKey:@"scrollViewOffset"]); 
[self.scrollView setContentOffset:offset animated:NO] 
+0

謝謝。你可能會告訴我的代碼?我對此很新穎。 –

+1

@SamGuichelaar如果是這樣,請選擇答案:-) –

+0

該答案爲我解決了它,謝謝你一堆! –

1

您還需要contentSize,contentOffset和zoomScale得到精確的輸出

您都可以存儲到UserDefault並在需要時再恢復

檢查這裏怎麼能與處理NSUserDefaultshttps://stackoverflow.com/a/4562488/4601900

NSMutableDictionary *dict = [@{ 
              kZoomLevel : [NSString stringWithFormat:@"%f", self.zoomScale], 
              kRotationDegree :[NSString stringWithFormat:@"%f", self.rotationAngle], 
              kScrollViewContentSize : NSStringFromCGSize(self.scrollViewPhoto.contentSize), 
              kScrollViewContentOffset : NSStringFromCGPoint(self.scrollViewPhoto.contentOffset), 
              }mutableCopy]; 

你需要這樣恢復它

if (dictMainData) { 

    NSString *contentSize = [dictMainData valueForKey:kScrollViewContentSize]; 
    if (contentSize) { 
     self.contentSize = CGSizeFromString(contentSize); 
     self.scrollViewPhoto.contentSize = self.contentSize; 
    } 

    NSString *contentOffset = [dictMainData valueForKey:kScrollViewContentOffset]; 
    if (contentOffset) { 
     self.contentOffset = CGPointFromString(contentOffset); 
     self.scrollViewPhoto.contentOffset = self.contentOffset; 
    } 

    NSString *strZoomLevel = [dictMainData valueForKey:kZoomLevel]; 
    if ([strZoomLevel floatValue] > 0) { 

     self.zoomScale = [strZoomLevel floatValue]; 
     self.viewBase.transform = CGAffineTransformMakeScale(self.zoomScale,[strZoomLevel floatValue]); 

     CGRect frame = self.viewBase.frame; 
     frame.origin = CGPointMake(0, 0); 
     self.viewBase.frame = frame; 
    } 

    NSString *strRotationDegree = [dictMainData valueForKey:kRotationDegree]; 
    if ([strRotationDegree floatValue] > 0) { 

     self.rotationAngle = [strRotationDegree floatValue]; 
     self.imageView.transform = CGAffineTransformMakeRotation(self.rotationAngle * M_PI/180); 

     //[self rotateTargetPointsAsPerRotationAngle]; 
    } 

} 
2

保存當前offsetUserDefaults

CGPoint tableOffset = [tableView contentOffset]; 

NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults setObject:NSStringFromCGPoint(tableOffset) forKey:@"pointPosition"]; 
[userDefaults synchronize]; 

要滾動到保存的位置:

CGPoint thePoint = CGPointFromString([userDefaults objectForKey:@"tableOffset"]); 
[tableView setContentOffset:thePoint animated:NO]]; 
相關問題