邮 箱:
   
密 码:
注册

IOS scrollRectToVisible问题

匿名网友 分类: 电脑/IT- 编程语言- 移动开发 被浏览 8145 次 一年前

举报

希望实现新闻客户端的标签 rect滚动到可以显示的范围内
由是我调用了 - (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated; 
但好像没啥作用呀?代码如下:
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.view.backgroundColor = [UIColor yellowColor];
    self.automaticallyAdjustsScrollViewInsets = NO;

    scroll = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 80, 320, 44)];
    scroll.contentSize = CGSizeMake(60*10, 0);
    for(int i=0; i<10; i++)
    {
        UIButton *bt = [[UIButton alloc]initWithFrame:CGRectMake(60*i, 0, 60, 44)];
        [bt setTitle:[NSString stringWithFormat:@"%i块",i] forState:UIControlStateNormal];
        bt.backgroundColor = [UIColor redColor];
        bt.tag = 1000+i;
        [scroll addSubview:bt];
        [bt addTarget:self action:@selector(pressBt:) forControlEvents:UIControlEventTouchUpInside];
    }
    scroll.delegate = self;
    scroll.backgroundColor = [UIColor clearColor];
    [self.view addSubview:scroll];
}
- (void)pressBt:(UIButton *)bt
{
    [scroll scrollRectToVisible:bt.frame animated:YES];
}
[/size][/size]
为什么呢???
 
我有更好的答案∨
 图片
验证码 (看不清,点图换一张)
出错啦!!!
热心的TA
采纳
推荐
热心的TA
采纳率:84% 10级 举报 一年前
要让 scrollView 按 Rect 来滚动的前提是 contentSize 的 x、y 都不能为0:
contentSize = CGSizeMake(60*10, 1);
也可以用convert后的位置来判断是向左向右,再根据bt的frame来计算滚动的位置。我下面的代码是这样处理的,如果点击的位置超过了屏幕的一半,这样scroll就向左滑动,让被点击的按钮处在屏幕中间。如果计算得到的posX 小于 0 说明滚动到了头部:
- (void)pressBt:(UIButton *)bt
{
    CGRect  rect = [self.scroll  convertRect: bt.frame toView:self.view];
    NSLog(@"rect is %@",NSStringFromCGRect(rect));
    CGFloat posX = 0;
    CGFloat halfWidth = 60/2;
    posX = bt.frame.origin.x-self.scroll.frame.size.width/2+halfWidth; //居中
     
    if (rect.origin.x >=self.scroll.frame.size.width/2 + halfWidth) {
        if(posX >= self.scroll.contentSize.width/2-halfWidth)
            posX = self.scroll.contentSize.width - self.scroll.frame.size.width; //尾部
    }else { //头部判断
        if (posX <= 0)
            posX = 0;  //头部
    }
     
    [UIView animateWithDuration:0.3f animations:^{
        [self.scroll setContentOffset:CGPointMake(posX, 0)];
    }];
     
    NSLog(@"Clicked");
}
评论10
 

全部回答(1)

分享: 

举报内容:

举报类型

举报原因


举报说明

详细的描述及证据可以帮助管理员更快速处理违规内容