Skip to content

iOS7で、カスタムしたUIPageControleが落ちる件

2013年9月12日

iOS7にした途端、カスタムしたUIPageControlを使ったページが落ちるようになった。

以下の実装方法を使っていたんだけど、なんだこれ〜っと調べてみると以下の様なことがわかった。
http://ria.surfboard.co.jp/blog/2010/12/08/uipagecontrolcustomise/

問題は「- (void)updateDots」部分。
まず、iOS6までのUIPageControlは、自身のSubViewsにUIImageViewを抱えている。
しかし、iOS7ではUIImageViewではなく、UIViewを抱えている。

当然、UIViewにsetImageなんてできないから落ちる、というわけです。

これってキャストすればよもや動かないか?と思ったけどダメ。

対応策としては、そのUIViewに新たにUIImageViewをセットすることで解決した。

コードは以下の様な感じ

- (void) updateDots
{
    if(_imageCurrent || _imageNormal)
    {
        // Get subviews
        NSArray* dotViews = self.subviews;
        LOG(@"%@",dotViews);
        // iOS6までは、今までこのSubViewsにUIImageViewが入ってきていたが
        // iOS7ではUIViewに変更されている。故に落ちてしまう。
        for(int i = 0; i < dotViews.count; ++i)
        {
            NSObject *obj = [dotViews objectAtIndex:i];
            
            // なので、内容クラスで分岐する
            if ([obj isKindOfClass:[UIImageView class]]) {
                UIImageView* dot = (UIImageView *)obj;
                // Set image
                if (i == self.currentPage) {
                    dot.image =_imageCurrent;
                }
                else{
                    dot.image =_imageNormal;
                }
            }
            else{
                // iOS7では以下の対応になる
                UIView *view = (UIView *)obj;
                
                if (view.subviews.count) {
                    [view.subviews[0] removeFromSuperview];
                }
                
                UIImageView *dot = [UIImageView new];
                dot.frame = view.bounds;
                
                // Set image
                if (i == self.currentPage) {
                    dot.image =_imageCurrent;
                }
                else{
                    dot.image =_imageNormal;
                }
                
                [view addSubview:dot];
                
            }
        }
    }
}

もしくはiOS7でUIPageControl使う時は素直に「- (void)setCurrentPageIndicatorTintColor:」することにする。

広告

From → iPhone開発

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。