簡體   English   中英

刪除UIScrollView子視圖幫助

[英]Removing UIScrollView subviews assistance

我想要一些幫助,以從滾動視圖中正確刪除子視圖,以減少內存使用量。 每次用戶滾動時,我要求獲取頁面-1和page + 1,以將視圖加載到scrollview中。

現在我的問題是,如果有十個視圖並排顯示,那么當您到達第十個視圖時,所有先前的9個視圖在滾動視圖和內存中仍然是子視圖。 我也想反向加載這些視圖。 這是我到目前為止的內容:

- (void)loadScrollViewWithPage:(int)page {
    if (page < 0) return;
    if (page >= [self favouritesCount]) return;
    // replace the placeholder if necessary
    MyObject *myObj = (MyObj *)[fetchedResultsController objectAtIndexPath:[NSIndexPath indexPathForRow:page inSection:0]];
    MyView *controller = [viewControllers objectAtIndex:page];
    if ((NSNull *)controller == [NSNull null]) {
        controller = [[MyView alloc] initWithObject:myObj];
        controller.delegate = self;
        [viewControllers replaceObjectAtIndex:page withObject:controller];
    }
    // add the controller's view to the scroll view
    if (nil == controller.superview) {
        CGRect frame = scrollView.frame;
        frame.origin.x = frame.size.width * page;
        frame.origin.y = 0;
        controller.frame = frame;
        [scrollView addSubview:controller];
    }
}

現在我已經嘗試過類似的東西:

if (page > 2) {
    [(UIView *)[[scrollView subviews] objectAtIndex:(page - 2)] removeFromSuperview];
}

但這只會使其崩潰。 這可能是一個簡單的解決方案,所以可以提供幫助:)

您增加了pageCount嗎?

您也可以嘗試以下方法:

MyView *controller = [viewControllers objectAtIndex:page];
if ((NSNull *)controller != [NSNull null]) {
   [controller removeFromSuperView];
}

命名約定的一些注意事項:MyView * controller沒有意義。 如果MyView是UIView的子類,則僅應在MyView * view時命名

我想如果我是您,我只會在視圖中添加“ loadData”和“ releaseData”方法,並在它們進入和離開視圖時調用它們。 當然,您仍然會加載視圖類,但是在這些方法中,您可以擺脫(並重新加載)那些視圖包含的重量更重的子對象。

祝好運,
布萊克。

我認為您的問題出在您發布的解決方案中:

[(UIView *)[[scrollView subviews] objectAtIndex:(page - 2)] removeFromSuperview];

如果刪除先前加載的視圖,則始終會加載2個視圖,因此您將無法訪問page-2,因為scrollview沒有加載page-2的視圖。 (例如,當頁面為5時,您將從scrollview訪問視圖3)

您應該考慮兩件事:

1.-使用[[[viewControllers objectAtIndex:page-2] view] removeFromSuperview]; 相反(看看這里我使用viewcontrollers而不是scroll.subviews

2.-從viewcontrollers array刪除該view ,因為僅從滾動中刪除該視圖不會從內存中釋放該視圖(數組保留該視圖)。 為此,請使用類似:

[viewControllers replaceObjectAtIndex:page-2 withObject:[NSNull null]];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM