0

UIButtonを使用して、UIScrollViewのコンテンツビューから別のビューに移動しようとしています。この他のビューをモーダルに表示したくないので、スタックにビューをプッシュしても機能しません。

例:私のViewcontrollerには、2つのコンテンツビューを持つScrollviewが含まれています。これらのコンテンツビュー内で、別のビューをスタックにプッシュしたいと思います。

私がやろうとしていることは可能ですか?

4

1 に答える 1

1

さて、私があなたの問題を十分に理解したかどうか見てみましょう。

@interface MyViewController ()
@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, strong) UIView *firstPlayerView;
@property (nonatomic, strong) UIView *secondPlayerView;
@end

@implementation MyViewController

-(UIView *)firstPlayerView
{
    if (!_firstPlayerView) {
        _firstPlayerView = [[UIView alloc] initWithFrame:self.view.bounds];
        // set up your view as you like and place the button to go to the second player
        // view when you need to.
        // let's suppose that you called that button "goToSecondPlayerViewButton"
        [goToSecondPlayerViewButton addTarget:self
                                       action:@selector(switchPlayer) 
                             forControlEvents:UIControlEventTouchUpInside];
    }
    return _firstPlayerView;
}

-(UIView *)secondPlayerView
{
    if (!_secondPlayerView) {
        _secondPlayerView = [[UIView alloc] initWithFrame:CGRectOffset(self.view.bounds, self.view.bounds.size.width, 0)];
        // set up your view as you like and place the button to go to the first player
        // view when you need to.
        // let's suppose that you called that button "goToFirstPlayerViewButton"
        [goToFirstPlayerViewButton addTarget:self
                                      action:@selector(switchPlayer) 
                            forControlEvents:UIControlEventTouchUpInside];
    }
    return _secondPlayerView;
}

-(UIScrollView *)scrollView
{
    if (!_scrollView) {
        _scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
        _scrollView.autoresizingMask = UIViewAutoresizingNone;
        [_scrollView addSubview:self.firstPlayerView];
        [_scrollView addSubview:self.secondPlayerView];
        _scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 2, self.view.frame.size.height);
        _scrollView.pagingEnabled = YES;
        _scrollView.scrollEnabled = NO;
        _scrollView.bounces = NO;
        _scrollView.showsVerticalScrollIndicator = NO;
        _scrollView.showsHorizontalScrollIndicator = NO;
    }
    return _scrollView;
}

-(void)switchPlayer
{
    if(self.scrollView.contentOffset.x == 0) {
        [self.scrollView scrollRectToVisible:CGRectMake(self.scrollView.bounds.size.width, 0, self.scrollView.bounds.size.width, self.scrollView.bounds.size.height) animated:YES];
        self.title = @"Second Player";
    } else {
        [self.scrollView scrollRectToVisible:self.scrollView.bounds animated:YES];
        self.title = @"First Player";
    }
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self.view addSubview:self.scrollView];
    self.title = @"First Player";
}

@end

それがあなたの問題を解決することを願っています!私はコードをテストしていないので、問題が発生した場合はコメントしてください。サポートさせていただきます。

編集済み:ビューを追加するには、スクロールビューのcontentSizeを拡大し、そのビューをサブビューとして追加します。

-(UIView *)thirdView
{
    if (!_thirdView) {
        _thirdView = [[UIView alloc] initWithFrame:CGRectOffset(self.view.bounds * 2, self.view.bounds.size.width, 0)];
        // set up your view as you like 
    }
    return _thirdView;
}

-(void)addThirdView
{
    self.scrollView.contentSize = CGSizeMake(self.scrollView.bounds.size.width * 3, self.scrollView.bounds.size.height);
    [self.scrollView addSubview:self.thirdView];
    [self.scrollView scrollRectToVisible:CGRectMake(self.scrollView.bounds.size.width * 2, 0, self.scrollView.bounds.size.width, self.scrollView.bounds.size.height) animated:YES];
}

これを一般化して、最初にコンテンツサイズを設定してから、引数としてインデックスを取得する単一のメソッドを使用できます。

-(void)scrollToViewAtIndex:(NSInteger)index
{
    [self.scrollView scrollRectToVisible:CGRectMake(self.scrollView.bounds.size.width * index, 0, self.scrollView.bounds.size.width, self.scrollView.bounds.size.height) 
                                animated:YES]; 
}
于 2012-10-06T11:08:56.010 に答える