2015-04-23 73 views
0

得到的UIButton位置我有一个scrollView上面有许多按钮。我试图让按钮位置形成滚动,所以我可以将它滚动到该位置。我的问题是,一旦我点击每个按钮,我总是会在_btnV.frame.origin.x中获得相同的值。那么请如何解决这个问题?如何从UIScrollView的

- (void)scrollView{ 

    segmentWidth = screenWidth/5; 

    NSArray *images = @[@"Smiley-1.png",@"Smiley-2.png",@"Smiley-3.png",@"Smiley-4.png",@"Smiley-5.png",@"Smiley-5.png",@"Smiley-5.png",@"Smiley-4.png",@"Smiley-1.png",@"Smiley-2.png",@"Smiley-3.png",@"Smiley-4.png"]; 

    long ScrollContentSize = ((images.count -1)*segmentWidth)+screenWidth; 

    _scrlView.contentSize = CGSizeMake(ScrollContentSize, _scrlView.frame.size.height); 

    float screenX2 = screenHeight/2 - segmentWidth/2; 

    __block float screenX = (screenWidth-segmentWidth)/2; 

    NSMutableArray *arr = [[NSMutableArray alloc] init]; 

    for(int i=0; i<images.count; i++) 
    { 
     _btnV = [[UIButton alloc]init]; 
     [_btnV setFrame:CGRectMake(screenX, screenX2, segmentWidth, segmentWidth)]; 
     [_btnV setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@",[images objectAtIndex:i]]] forState:UIControlStateNormal]; 
     [_btnV setBackgroundColor:[UIColor redColor]]; 
     [_btnV addTarget:self action:@selector(scrollToMe:) forControlEvents:UIControlEventTouchUpInside]; 

     [_btnV setTag:i]; 

     [arr addObject:_btnV]; 
     [_scrlView addSubview:_btnV]; 

     screenX = screenX+segmentWidth; 
    } 

    _menuItems = arr; 

    [self.view addSubview:_scrlView]; 
} 


-(void) scrollToMe:(id)sender{ 

    int scrollX = _scrlView.contentOffset.x; 
    int mod = scrollX % segmentWidth; 
    int position = scrollX/segmentWidth; 
    float positionOffset = (float) mod/segmentWidth; 

    scrollX = position * segmentWidth; 

    NSLog(@"position:%f",_btnV.frame.origin.x); 

    //scrollX = ... 

    [_scrlView setContentOffset:CGPointMake(scrollX, scrollX) animated:YES]; 
} 
+0

什么是需要调用'setContentOffset'在UIButton的选择方法。因为你在'UIButton'上'敲'意味着你已经在这个偏移量上了。 –

回答

2

使用它的标签值

-(void) scrollTo:(id)sender{ 

    UIButton * button = (UIButton *)sender; 
    int position = button.tag; 

    scrollX = position * segmentWidth; 

    NSLog(@"position:%f",_btnV.frame.origin.x); 

    //scrollX = ... 

    [_scrlView setContentOffset:CGPointMake(scrollX, scrollX) animated:YES]; 
} 
+0

这太好了,我不知道我应该给发件人打电话。 – CAN

1

要调用的UIButton选择方法查找按钮。所以在这种方法中,您可以直接获取相对于UIScrollView的UIButton位置。像

-(void) scrollTo:(id)sender{ 

    UIButton* btnClick = (UIButton*)sender; 
    NSLog(@"X position : %f",btnClick.frame.origin.x); 
} 

希望这对你有所帮助。

+0

让我知道你是否想要一些不同的东西。 –

+0

您的解决方案是作为下面的答案再次感谢您的帮助。我不认为我应该打电话给按钮发件人。我投票+1 – CAN

+0

@CAN,有点读我的评论。我认为在UIButton选择器方法中不需要setContents。 –

0

试试这个,它会记录你所有的按钮的位置正确

-(void) scrollTo:(id)sender{ 

    int scrollX = _scrlView.contentOffset.x; 
    int mod = scrollX % segmentWidth; 
    int position = scrollX/segmentWidth; 
    float positionOffset = (float) mod/segmentWidth; 

    scrollX = position * segmentWidth; 
for(int i=0; i<images.count; i++) 
{ if([[[_scrlView subviews] objectAtIndex:i] isKindOfClass:[UIButton class]]) { 
     Button btn = [[_scrlView subviews] objectAtIndex:i]; 
NSLog(@"position:%f",btn.frame.origin.x); 
    } 

} 
    //scrollX = ... 

    [_scrlView setContentOffset:CGPointMake(scrollX, scrollX) animated:YES]; 
}