2013-06-20 39 views
3

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

感谢,

伊万

+0

附注了滚动的代表 - 摆脱IBOutlet'的'。这只在使用Interface Builder时才需要,而不是以编程方式创建。 – rmaddy

+0

@rmaddy为了完整起见,应该说'IBOutlet'不会伤害任何东西,并且它可能会让你*从* .xib或storyboard设置滚动视图。 – Caleb

回答

2

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

没错。

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

它会如果您将新铸造的滚动视图分配给属性或实例变量。这就是他们的目的。

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

+0

好吧,所以我创建了实例变量:UIScrollView * topScrollView; ,并能够得到它的工作。我后来用topScrollView = [[UIScrollView alloc] init]初始化它;这工作。您对这些物业提出的其他建议,我必须在那里做些什么? –

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; 
    } 
} 
0

您可以使用下面的代码添加的UIScrollView上yourView: -

第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

-(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 
}