0

私のアプリの一部では、ボタンをクリックすると新しいページが作成されます。ただし、そのページを以前に表示していたページとまったく同じにする必要がありますが、その新しいインスタンスにすぎません。SO でこれを行う最善の方法を尋ねたところ、ページングを有効にした UIScrollView が最善の方法であることがわかりました。それで、私がしようとしていたことをやろうとするコードを書きました。ただし、ボタンを押すと、アプリがクラッシュします。私はそれがある種の再帰に入ったと仮定しています(何度も何度も呼び出します)。何が間違っているのかについての洞察は素晴らしいでしょう。すべてのコンセントが StoryBoard のそれぞれの位置に接続されていることを確認できます。

-(IBAction)createContainer:(id)sender {


    [allScrollViews addObject:self.containerView];
    for (int i = 0; i < allScrollViews.count; i++) {
        CGRect frame;
        frame.origin.x = self.containerView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = self.containerView.frame.size;

        UIView *subview = self.view;
        subview.backgroundColor = self.view.backgroundColor;
        [self.containerView addSubview:subview];

    }

    self.containerView.contentSize = CGSizeMake(self.containerView.frame.size.width * allScrollViews.count, self.containerView.frame.size.height);   

}

繰り返しますが、ボタンを押すと、現在表示しているビュー (ViewController.m) がほぼ複製され、新しいページに新しいインスタンスが作成されます。私のコードが、私が達成しようとしているものに近いことを願っています。

どうもありがとう!〜カーペットフィズ

編集:それが役立つ場合、これはアプリがクラッシュしたときに強調表示されます:

0x2281b61:  calll  0x2281b66       CA::Layer::ensure_transaction_recursively(CA::Transaction*) + 14
4

1 に答える 1

0

私はあなたがこのようにするべきだと思います:

-(IBAction)createContainer:(id)sender {
    [allScrollViews addObject:self.containerView];
    for (int i = 0; i < allScrollViews.count; i++) {
        CGRect frame = self.containerView.frame;
        frame.origin.x = self.containerView.frame.size.width * i;
        frame.origin.y = 0;
        self.containerView.frame = frame;

        [self.scrollView addSubview: self.containerView];
    }

    self.scrollView.contentSize = CGSizeMake(self.containerView.frame.size.width * allScrollViews.count, self.containerView.frame.size.height);   

}
于 2013-05-24T04:50:05.190 に答える