以编程方式创建UIScrollView

时间:2013-06-20 21:02:25

标签: ios objective-c uiscrollview

我正在尝试以编程方式创建UIScrollView。我设置了一个属性并合成它。

@property (weak, nonatomic) IBOutlet UIScrollView *topScrollView;
@synthesize topScrollView;

然后我有一个方法来做到这一点。

[topScrollView setFrame:CGRectMake(320, 0, 320, 65)];
[topScrollView setContentSize:CGSizeMake(500, 100)];
[topScrollView setBackgroundColor:[UIColor greenColor]];
[topScrollView setScrollEnabled:YES];
[topScrollView setShowsHorizontalScrollIndicator:YES];
[topScrollView setShowsVerticalScrollIndicator:NO];
[[self view] addSubview:topScrollView]; 

我把它放在viewDidLoad中。 这不会创建滚动视图。我认为这是因为滚动视图尚未初始化。我可以在上面的方法中进行分配和初始化,但是当我想在另一个方法中使用它时它不会工作。我看了Programmatically added UIScrollView used in multiple methods,但没有太多帮助。可能有一个我不知道的简单解决方案。我该怎么做才能以编程方式创建这个滚动视图,并能够在另一种方法中使用它(主要是用它来进行动画制作)。

谢谢,

伊万

4 个答案:

答案 0 :(得分:2)

  

我认为这是因为滚动视图尚未初始化。

右。

  

我可以在上面的方法中进行分配和初始化,但是当我想在另一种方法中使用它时它不会工作。

如果您将新创建的滚动视图分配给属性或实例变量,则会执行此操作。这就是他们的目的。

哦,还有一件事。您需要确保以某种方式保留滚动视图。这意味着将topScrollView属性更改为strong,或将其添加到视图中(然后将其保留),或两者兼而有之。

答案 1 :(得分:0)

简单方法:  如果需要手段,可以多次创建

- (void)scrollView
{

    int x = 0;
    int y = 10;
    for(int i=0; i<5; i++)
    {
        UIScrollView *scrollview=[[UIScrollView alloc]initWithFrame:CGRectMake(x, y, 50, 50)];
        scrollview.showsVerticalScrollIndicator=YES;
        scrollview.scrollEnabled=YES;
        scrollview.userInteractionEnabled=YES;
        scrollview.backgroundColor = [UIColor greenColor];
        [self.view addSubview:scrollview];
        //scrollview.contentSize = CGSizeMake(50,50);
        x=x+55;
    }
}

答案 2 :(得分:0)

您可以使用以下代码在您的视图上添加UIScrollView: -

第1步:

Delegate "UIScrollViewDelegate" to your ViewController.h

for example:
  @interface yourViewController:UIViewController<UIScrollViewDelegate> 

第2步:

//create you UIScrollView
UIScrollView  *MyScrollVw= [[UIScrollView alloc]initWithFrame:CGRectMake(0 ,0 ,320 ,480)]; 
MyScrollVw.delegate= self;
[MyScrollVw setShowsHorizontalScrollIndicator:NO];
[MyScrollVw setShowsVerticalScrollIndicator:YES];
MyScrollVw.scrollEnabled= YES;
MyScrollVw.userInteractionEnabled= YES;
[yourView addSubview:MyScrollVw];
MyScrollVw.contentSize= CGSizeMake(320 ,1500);//(width,height)

第3步:

您想在ViewController.m中实现scrollView Delegates

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
   return imgView;
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
   NSLog(@"Did end decelerating");
   //do your code here
}   
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
   NSLog(@"Did scroll");
   //do your code here
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    NSLog(@"Did end dragging");
   //do your code here
}
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
    NSLog(@"Did begin decelerating");
   //do your code here
}
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
   NSLog(@"Did begin dragging");
   //do your code here
}

答案 3 :(得分:0)

SWIFT 中的直接编程方式

总结一下

创建一个 UIScrollView

let scrollView = UIScrollView() 
scrollView.translatesAutoresizingMaskIntoConstraints = false

使用单个子视图来保存所有内容子视图

let contentView = UIView()
contentView..translatesAutoresizingMaskIntoConstraints = false

通常,您只希望您的内容朝一个方向滚动。在大多数情况下垂直滚动。因此将内容视图的宽度设置为滚动视图的宽度。

NSLayoutConstraint.activate([
    contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor)

将四个约束(顶部、底部、左侧、右侧)从我们的单个内容视图附加到滚动视图。

    contentView.topAnchor.constraint(equalTo: scrollView.topAnchor),
    contentView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
    contentView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
    contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),

确保在内容视图的所有四个方面都附加了约束,以便它可以扩展到您的内容的大小。

// After Adding your subviews to the contentView make sure you've those two constraints set:

    firstSubView.topAnchor.constraint(equalTo: contentView.topAnchor),
    .
    .
    .
    lastSubView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
])

参考:Using UIScrollView with Auto Layout in iOS