我正在尝试以编程方式创建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,但没有太多帮助。可能有一个我不知道的简单解决方案。我该怎么做才能以编程方式创建这个滚动视图,并能够在另一种方法中使用它(主要是用它来进行动画制作)。
谢谢,
伊万
答案 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),
])