0

NavigationController に接続された 2 つのビューがあります。2 番目のビューは、ページ コントロールを備えた scrollView です。私のメイン ビューには 1 つの UIButton があります。それを押すと、3〜4秒の遅延が得られます。scrollView には 21 個のビューがあります。そして、scrollView でビュー間をスクロールすると噴出します。遅延を減らしてスパートを取り除くにはどうすればよいですか?

私のviewDidLoad方法:

-(void)viewDidLoad {
self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0.0f, 280.0f, 320.0f, 20.0f)];
[self.view addSubview:self.pageControl];

self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, 30.0f, 480.0f, 250.0f)];
[self.view addSubview:self.scrollView];

pageControlBeingUsed = NO;

NSInteger firstNumber = 1;
for (NSUInteger i = 0; i < 20; i++) {
    BIDExercisePrototype *view = [[BIDExercisePrototype alloc] initWithNumber:firstNumber];
    [self.viewsArray addObject:view];
    firstNumber += 50;
}


for (NSUInteger i = 0; i < 20; i++) {
    UIViewController *someController = [[UIViewController alloc] init];
    someController = [self.viewsArray objectAtIndex:i];
    someController.view.frame = CGRectMake(480.0f*i, 0.0f, 480.0f, 280.0f);
    [self.scrollView addSubview:someController.view];
}
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * self.viewsArray.count, self.scrollView.frame.size.height);
self.pageControl.backgroundColor = [UIColor clearColor];
self.pageControl.currentPage = 0;
self.pageControl.numberOfPages = self.viewsArray.count;
self.scrollView.showsVerticalScrollIndicator = NO;
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.pagingEnabled = YES;
self.scrollView.delegate = self;
[self.pageControl addTarget:self action:@selector(changePage) forControlEvents:UIControlEventValueChanged];
}

- (void)scrollViewDidScroll:(UIScrollView *)sender {
if (!pageControlBeingUsed) {
    CGFloat pageWidth = self.scrollView.frame.size.width;
    int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    self.pageControl.currentPage = page;
}
    }

    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
pageControlBeingUsed = NO;
    }

    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
pageControlBeingUsed = NO;
    }

    - (void)changePage {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * self.pageControl.currentPage;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
[self.scrollView scrollRectToVisible:frame animated:YES];

pageControlBeingUsed = YES;
    }
4

2 に答える 2

1

UITableView のスクロール パフォーマンスを向上させるために、同じ方法に従うことができるはずです。

手動で描画し、各セルにビューを 1 つだけ配置します。

特定の方法でセルをレンダリングすることでスクロールのパフォーマンスを向上させる複数の方法について説明している次の SO 投稿を確認してください。

iPhone UITableView のスクロール パフォーマンスを改善するための秘訣は?

于 2012-06-18T22:40:41.707 に答える
1

(いわば)車輪の再コーディングを忘れて、すでに問題を解決した既存のプロジェクトを使用することをお勧めします

于 2012-06-19T06:45:37.797 に答える