5

iPhone のネイティブ アプリケーションの UIPageControl を使用して検索を実行できるように、最初のページのドットの代わりに拡大鏡のアイコンを追加する方法はありますか?

Google で検索してみましたが、同様の質問はまったく見つかりませんでしたが、Apple アプリケーションで広く普及している機能のようです。

誰でもアドバイスを手伝ってもらえますか?

4

2 に答える 2

6

基本的に、UIPageControlには、_indicators各ドットのUIViewを含む配列があります。この配列は私有財産であるため、混乱させないでください。カスタムアイコンが必要な場合は、独自のページインジケーターの実装を行う必要があります。

編集:さらに調査した後、UIPageControlサブビューを置き換えてドット画像をカスタマイズできるようです。詳細については、 http://www.onidev.com/2009/12/02/customisable-uipagecontrol/を確認してください。しかし、Appleのレビュアーがそのようなことをすることについてどのように感じるかはまだわかりません。

于 2009-11-21T23:10:21.653 に答える
1

これを簡単かつ合法的に (プライベート API なしで) 実現するために、UIPageControl サブクラスを作成しました。基本的に、私は setNumberOfPages を上書きしました: 最後の円の中に彼のアイコンを持つ UIImageView を挿入します。次に、setCurrentPage: メソッドで、最後のページが強調表示されるかどうかを検出し、UIImageView の状態を変更し、円の背景色をクリアします。これは、UIPageControl プライベート API によって自動的に更新されるためです。

結果は次のとおりです。 ここに画像の説明を入力

これはコードです:

@interface EPCPageControl : UIPageControl
@property (nonatomic) UIImage *lastPageImage;
@end

@implementation EPCPageControl

- (void)setNumberOfPages:(NSInteger)pages
{
    [super setNumberOfPages:pages];

    if (pages > 0) {

        UIView *indicator = [self.subviews lastObject];
        indicator.backgroundColor = [UIColor clearColor];

        if (indicator.subviews.count == 0) {

            UIImageView *icon = [[UIImageView alloc] initWithImage:self.lastPageImage];
            icon.alpha = 0.5;
            icon.tag = 99;

            [indicator addSubview:icon];
        }
    }
}

- (void)setCurrentPage:(NSInteger)page
{
    [super setCurrentPage:page];

    if (self.numberOfPages > 1 && self.lastPageImage) {

        UIView *indicator = [self.subviews lastObject];
        indicator.backgroundColor = [UIColor clearColor];

        UIImageView *icon = (UIImageView *)[indicator viewWithTag:99];
        icon.alpha = (page > 1 && page == self.numberOfPages-1) ? 1.0 : 0.5;
    }
}
于 2013-12-31T15:25:47.207 に答える