简体   繁体   English

UIScrollView和UIPageControl,我在做什么错?

[英]UIScrollView and UIPageControl, what am I doing wrong?

I have a class which is predefining some labels and binding their values in a UIScrollView. 我有一个预定义一些标签并将其值绑定到UIScrollView中的类。

I've managed to show those labels, but now I'm stuck at putting a label at the 2nd part of the ScrollView. 我设法显示了这些标签,但是现在我只能将标签放在ScrollView的第二部分。

I've pushed my project to gitHub . 我已经将项目推送到gitHub

I can change the label's place on the already visible part, but I must be overlooking something. 我可以更改标签在已经可见的部分上的位置,但是我必须忽略某些东西。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationItem.title = _detail.name;
    UIColor *bgColor = [UIColor blackColor];
    UIColor *txtColor = [UIColor grayColor];
    CGRect frame;
    frame.origin.x = 0;
    frame.origin.y = 0;

    frame.size.width = _scrollView.frame.size.width *2;



    NSString *phoneNr = (_detail.phoneNr == nil) ? @"Not specified" : _detail.phoneNr;

    _telLabel = [self prepareLabel:phoneNr textColor:txtColor bgColor:bgColor page:0 y:telNrYAxis];


    _webLabel = [self prepareLabel:@"Visit website" textColor:txtColor bgColor:bgColor page:0 y:websiteYAxis];

    _detail.address = [_detail.address stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\n\t "]];
    NSArray *addressArrComponents = [_detail.address componentsSeparatedByString:@","] ;



    _addressLabel =  [self prepareLabel:[addressArrComponents componentsJoinedByString:@"\n"] textColor:txtColor bgColor:bgColor page:0 y:addressYAxis];


    UILabel *lbl = [self prepareLabel:@"Derp" textColor:txtColor bgColor:bgColor page:1 y:0];


    _detailView = [[UIView alloc] initWithFrame:frame];
    _detailView.backgroundColor = [UIColor blackColor];

    [_detailView addSubview:_webLabel];
    [_detailView addSubview:_addressLabel];
    [_detailView addSubview:_telLabel];
    [_detailView addSubview:lbl];

    [_scrollView addSubview:_detailView];
    NSLog(@"%f",self.view.frame.size.height - (_scrollView.frame.origin.y + _scrollView.frame.size.height) );

    _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height - 250 , self.view.frame.size.width/4, 120)];
    _pageControl.numberOfPages=2;
    _pageControl.currentPage=0;


    [_pageControl addTarget:self action:@selector(pageChange:) forControlEvents:UIControlEventTouchDown];
    _scrollView.contentSize = CGSizeMake(800,800);
    _scrollView.delegate=self;
    _scrollView.backgroundColor = [UIColor blackColor];
    _scrollView.pagingEnabled=YES;

    _scrollView.showsHorizontalScrollIndicator = NO;
    _scrollView.showsVerticalScrollIndicator = NO;
    _scrollView.scrollsToTop = NO;
    [self pageChange:0];
    [self.view addSubview:_pageControl];
    // Do any additional setup after loading the view.
}

-(UILabel*)prepareLabel:(NSString*) text textColor:(UIColor*)textColor bgColor:(UIColor*)backgroundColor page:(int)page y:(int) yPos{
    int lines = [[text componentsSeparatedByString:@"\n"] count];

    CGRect labelFrame = CGRectMake(_detailView.frame.size.width * page +20,yPos,self.view.frame.size.width, [UIFont systemFontSize]*lines);

    UILabel *returnLabel = [[UILabel alloc] initWithFrame:labelFrame];
    returnLabel.text = text;
    returnLabel.backgroundColor = backgroundColor;
    returnLabel.textColor = textColor;


    [returnLabel setNumberOfLines:lines];
    [returnLabel sizeToFit];

    return returnLabel;
}
- (void)loadScrollViewWithPage:(int)page {
    NSLog(@"Derped");
}

-(IBAction)pageChange:(id)sender{

    int page=_pageControl.currentPage;
    CGRect frame = _scrollView.frame;
    frame.origin.x = _scrollView.frame.size.width * page;
    frame.origin.y = 0;

    //CGRect frame= (page == 0) ? _detailFrame : _reviewFrame;
    NSLog(@"%f",frame.origin.x);
    [_scrollView scrollRectToVisible:frame animated:YES];
}

The delegate -(IBAction)pageChange:(id)sender gets fired, but I must be doing something wrong with the frames somewhere :s 委托-(IBAction)pageChange:(id)sender被解雇,但是我必须对:s某处的帧做错了

Please take a look! 请看一下!

Try to implement this method may help you : 尝试实现此方法可能会帮助您:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat pageWidth = self.scrollView.frame.size.width; 
    float fractionalPage = self.scrollView.contentOffset.x / pageWidth;
    NSInteger page = lround(fractionalPage);
    self.pageControl.currentPage = page; 
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM