1

今日遭遇した問題は、 のサブクラスにありUIPageControlます。初期化すると、初期化の直後に変更したいので、フレーム(特に原点)とドットの画像はデフォルトのままです。これが問題です。ただし、初期化後に scrollView (「タッチ アンド ムーブ」のように) を使用して移動すると、それら (ドット) は何らかの形で正しい画像で正しい位置にジャンプします。

何が問題なのですか?

コード:

CustomPageControl.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 を呼び出して設定する必要がありました。

-(void)updateDots 関数に何らかの形でリンクされていない限り、UIScrollView がこれにどのような影響を与えるかわかりません (たとえば、カスタム ページ コントロールの currentIndex を設定します)。「ただし、初期化後に scrollView (「タッチ アンド ムーブ」のように) で移動すると、それら (ドット) は正しい画像で正しい位置にジャンプします。」
それらは「正しい画像で正しい位置にジャンプする」ため、 -(void)updateDots 関数を呼び出す必要があります。他の説明は見当たりません。

また、反復ループは、.subViews 配列内のすべての UIViews が UIImageViews であると想定していますが、これを想定するのはかなり安全ですが、UIView がリフレクション付きの UIImageView であるかどうかを確認します。

于 2012-11-12T04:15:37.393 に答える