2012-11-23 31 views
0

我有一个类是预先定义了一些标签,并在UIScrollView中绑定它们的值。UIScrollView和UIPageControl,我做错了什么?

我已经设法显示这些标签,但现在我坚持把标签放在ScrollView的第二部分。

我把我的项目推到gitHub

我可以改变标签在已经看得见的部分上的位置,但我必须忽略一些东西。

- (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]; 
} 

委托-(IBAction)pageChange:(id)sender被炒鱿鱼,但我必须做一些错误的某处框架:■

请看看!

回答

0

尝试实施这种方法可以帮助你:

- (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; 
} 
+0

感谢您抽出宝贵时间来回答,虽然我不认为这会是解决方案。 (我试过了,不是)。我想我可能会忽略与框架有关的东西,但是它是标签没有正确放置或者框架不够大(后者在逻辑上不可能,因为它被初始化为scrollView的宽度,但是您永远不会知道)。干杯 – Daneo