gpt4 book ai didi

iphone - UIScrollViewDelegate 未触发

转载 作者:太空狗 更新时间:2023-10-30 03:56:49 26 4
gpt4 key购买 nike

这可能是一些sort of duplicate of this question .但我试图应用它的答案无济于事。

我有一个 UIScrollViewpagingEnabled。我想使用 UIScrollViewDelegate 来帮助检测我所在的页面。这是我的代码:

@interface SearchMissionViewController : UIViewController <UIScrollViewDelegate> {

UIScrollView *scroll;

}
@property (nonatomic, retain) UIScrollView *scroll;

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
- (IBAction) popView;


@end




- (void)viewDidLoad
{
[super viewDidLoad] ;

// Here I have also tried scroll.delegate = self;
self.scroll.delegate = self;


self.view.backgroundColor = [UIColor redColor];
scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

// Is this correct? I've added it to try to get the UIScrollView Delegate calling scrollViewDidEndScrollingAnimation (or whatever)
// [scroll setContentOffset:CGPointMake(0.0, 0.0) animated:YES];


scroll.pagingEnabled = YES;
NSInteger numberOfViews = 3;
for (int i = 0; i < numberOfViews; i++) {
CGFloat yOrigin = i * self.view.frame.size.width;
UIView *awesomeView = [[UIView alloc] initWithFrame:CGRectMake(yOrigin, 0, self.view.frame.size.width, self.view.frame.size.height)];
awesomeView.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1];


UIImageView *targetView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"targetImageA.png"]];
targetView.frame = CGRectMake(0.0, 0.0, 139, 153);
targetView.frame = CGRectMake(yOrigin+90 , 80, 139, 153);


UILabel *targetNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(yOrigin+95, 230, 100, 20)];
targetNameLabel.text = @"Bond";
targetNameLabel.backgroundColor = [UIColor clearColor];
targetNameLabel.textColor = [UIColor redColor];


UILabel *missionNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(yOrigin+95, 250, 100, 20)];
missionNameLabel.text = @"Mission";
missionNameLabel.backgroundColor = [UIColor clearColor];
missionNameLabel.textColor = [UIColor redColor];



[scroll addSubview:awesomeView];
[scroll addSubview:targetView];
[scroll addSubview:targetNameLabel];
[scroll addSubview:missionNameLabel];

// Why does this get released? Wouldn't it then dissappear from the scroll view? Should I not be releasing other objects from above?
[awesomeView release];


}
scroll.contentSize = CGSizeMake(self.view.frame.size.width * numberOfViews, self.view.frame.size.height);
[self.view addSubview:scroll];
[scroll release];




// Overlap image
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
imgView.image= [UIImage imageNamed:@"mission-viewfinder.png"];
[self.view addSubview:imgView];


// Place back button ontop of the image.
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom ];
[button addTarget:self
action:@selector(popView)
forControlEvents:UIControlEventTouchDown];
button.frame = CGRectMake(0.0, 0.0, 100.0, 60.0);
[self.view addSubview:button];


// Do any additional setup after loading the view from its nib.
}








- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSLog(@" ");
NSLog(@" Scroll View Did End Decelerating");
NSLog(@" ");

}



- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@" ");
NSLog(@" Scroll View Did End Scroll ! ! ! ");
NSLog(@" ");

}

本质上的问题是上面的两个方法,scrollViewDidEndDecleratingscrollViewDidScroll 没有打印。换句话说,他们没有被调用。

有什么想法吗?

最佳答案

问题在于语句的顺序:

self.scroll.delegate = self;
...
scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];

您尝试在创建 ScrollView 之前设置委托(delegate),因此该语句无效,因为 scrollnil。改为这样做:

self.scroll = [[[UIScrollView alloc] initWithFrame:CGRectMake(...)] autorelease];
self.scroll.delegate = self;

我刚刚注意到你的评论:

// Why does this get released? Wouldn't it then dissappear from the scroll view? Should I not be releasing other objects from above?
[awesomeView release];

是的,您应该在将它们添加到 scrollView 之后释放 targetViewtargetNameLabelmissionNameLabel。您拥有它们是因为您创建了它们(通过 alloc-init)并且您必须通过向它们发送 release 消息来放弃它们的所有权。当您将它们添加到 scrollView 时,它会按照 addSubview: 文档中的说明保留它们,以确保在 scrollView 需要它们时它们不会被释放。

关于iphone - UIScrollViewDelegate 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6842568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com