2012-11-23 5 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 너비를 twiced하지만 결코 알지 못한다.) 건배 – Daneo

관련 문제