1

我今天遇到的问题是我的子类UIPageControl. 当我初始化它时,点的框架(特别是原点)和图像保持默认,这是问题所在,因为我希望它在初始化后立即更改。但是,当我在初始化后使用 scrollView 移动(如“触摸并移动”)时,它们(点)以某种方式跳转到正确的位置并显示正确的图像。

可能是什么问题呢?

代码:

自定义页面控件.m

- (id) initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];

    activeImage = [UIImage imageNamed:@"doton.png"];
    inactiveImage = [UIImage imageNamed:@"dotoff.png"];

    return self;
}

- (void) updateDots
{
    for (int i = 0; i < [self.subviews count]; i++)
    {
        UIImageView *dot = [self.subviews objectAtIndex:i];
        if (i == self.currentPage) dot.image = activeImage;
        else dot.image = inactiveImage;
        [dot setFrame:CGRectMake(i * 13.5, 1.5, 17, 17)];
    }    
}

- (void)setCurrentPage:(NSInteger)currentPage
{
    [super setCurrentPage:currentPage];
    [self updateDots];
}

@end

ChooseView.m - 初始化部分

scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 160, 300)];
[scrollView setBackgroundColor:[UIColor clearColor]];
[scrollView setDelaysContentTouches:NO];
[scrollView setCanCancelContentTouches:YES];
[scrollView setClipsToBounds:NO];
[scrollView setScrollEnabled:YES];
[scrollView setPagingEnabled:YES];
[scrollView setShowsHorizontalScrollIndicator:NO];
[scrollView setShowsVerticalScrollIndicator:NO];

pageControl = [[CustomPageControl alloc] initWithFrame:CGRectMake(200, 300, 80, 20)];
[pageControl setBackgroundColor:[UIColor clearColor]];
pageControl.numberOfPages = 6;
[pageControl setCurrentPage:0];

最后一行是我希望UIPageControl刷新的时候,但是这不会发生。

4

1 回答 1

1

标准 UIPageControl 实现会发生这种情况吗?

您的问题表明您的对象子视图(例如 UIImageViews)矩形/大小未初始化为您想要的大小/位置。
我在我的项目中使用 nib 而不是以编程方式实现了此代码,我需要调用 -(void)updateDots 将其设置为它的初始条件是标准点..

我看不到 UIScrollView 对此有何影响,除非它以某种方式链接到您的 -(void)updateDots 函数(例如,您设置自定义页面控件的 currentIndex )。您说,“但是,当我在初始化后使用 scrollView 移动(如在“触摸并移动”中)时,它们(点)以某种方式跳到正确的位置并显示正确的图像。
因为他们“用正确的图像跳到正确的位置”,这意味着你的 -(void)updateDots 函数必须被调用。我没有看到任何其他解释。

此外,您的迭代循环假定 .subViews 数组中的所有 UIViews 都是 UIImageViews,尽管假设这一点相当安全,但我会检查 UIView 是否是带有反射的 UIImageView。

于 2012-11-12T04:15:37.393 回答