忍者ブログ
[98] [97] [96] [95] [94] [93] [92] [91] [90] [89] [88
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


ずいぶん遅くなっている感じもするが、iOS8対応がだいぶ進んだので対応内容を少しづつ書いてこうと思う。
結構よく使うUIが変更となった為、ある程度処理をまとめる事が出来ないか考えていると時間がかっかた。
まずは、「UIPopoverController」で行った対応内容。

既にたくさん情報が出ているように、「UIPopoverController」が使えなくなり、それに置き換えるように、「UIPopoverPresentationController」を使う事になった。
さらに、iPhoneでも使えるようになったので、iPhoneでの表示に無理矢理感が無くなった。
当然、iOS8以前では使えないので、バージョンによって処理を分ける必要が出てきた。
その辺りを考えて処理をまとめて下記のようなものを作った。

// Popoverの初期化
-(UIPopoverController *)uipopoverViewInit:(UIViewController *)mainView addView:(UIView *)addView sourceView:(UIBarButtonItem *)sourceView
{
    UIPopoverController *popoverView;
    
    if ([UIPopoverPresentationController class]) {
        // iOS バージョンが 8 以上で、UIPopoverPresentationController クラスが利用できる場合
        CGSize screenSize = [[self mainScreen] bounds].size;
        UIView *backView = [[UIView alloc] init];
        backView.frame = mainView.view.bounds;
        backView.backgroundColor = [UIColor blackColor];
        backView.alpha = 0.3;
        backView.hidden = YES;
        [mainView.view addSubview:backView];
        [mainView.view addSubview:addView];
        addView.center = CGPointMake(screenSize.width/2, (screenSize.height/2)-30);
        mainView.modalPresentationStyle = UIModalPresentationOverFullScreen;
        UIPopoverPresentationController *popPC = mainView.popoverPresentationController;
        popPC.barButtonItem = sourceView;
        popPC.permittedArrowDirections = UIPopoverArrowDirectionAny;
        popoverView = nil;        
    }else{
        // iOS バージョンが 8 以前で、UIPopoverPresentationController クラスが利用できない場合
        mainView.view = [addView initWithFrame:addView.bounds];
        mainView.contentSizeForViewInPopover = addView.bounds.size;
        popoverView = [[UIPopoverController alloc]initWithContentViewController:mainView];
    }
    addView.hidden = YES;
    
    return popoverView;
}

// Popoverのを開く
-(void)uipopoverViewOpen:(UIViewController *)openView sourceView:(UIView *)sourceView popoverView:(UIPopoverController *)popoverView controller:(id)controller
{
    if ([UIPopoverPresentationController class]) {
        // iOS バージョンが 8 以上で、UIPopoverPresentationController クラスが利用できる場合
        UIView* backView = [openView.view.subviews objectAtIndex:0];
        
        backView.hidden = NO;
        backView.alpha = 0.3;

        [controller presentViewController:openView animated:NO completion:nil];
        
        // 背景をタッチしたら、Popoverを隠す
        UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: controller action:@selector(closePopoverView:)];
        [backView addGestureRecognizer:gestureRecognizer];
    }else{
        // iOS バージョンが 8 以前で、UIPopoverPresentationController クラスが利用できない場合
        [popoverView presentPopoverFromRect:CGRectMake(sourceView.frame.origin.x + (sourceView.frame.size.width / 2),
                                                       sourceView.frame.origin.y + (sourceView.frame.size.height / 2), 0, 0)
                                     inView:controller.view
                   permittedArrowDirections:UIPopoverArrowDirectionAny
                                   animated:YES];
    }
}

// Popoverのを閉じる
-(void)uipopoverViewClose:(UIViewController *)closeView popoverView:(UIPopoverController *)popoverView
{
    if ([UIPopoverPresentationController class]) {
        // iOS バージョンが 8 以上で、UIPopoverPresentationController クラスが利用できる場合
        UIView* backView = [closeView.view.subviews objectAtIndex:0];
        
        backView.hidden = YES;
        
        [closeView dismissViewControllerAnimated:NO completion:nil];
    }else{
        // iOS バージョンが 8 以前で、UIPopoverPresentationController クラスが利用できない場合
        [popoverView dismissPopoverAnimated:NO];
    }
}

-(void)closePopoverView:(id)sender
{
    // Popoverを閉じる
    [self uipopoverViewClose:closeView popoverView:nil];
}

こののように初期化、開く処理、閉じる処理をまとめたものを作った。
そして一番下のものが、背景部分をタッチした時に画面を閉じる処理。
これを行わない場合、表示させたpopoverの欄外をタッチしても何も起きない。
uipopoverの場合は、自動で閉じる処理が行われるようになっていたが、今回からは自分で実装する必要があるらしい。
その為に、このような処理まで新規に追加する必要がある。

これらを、セットで呼び出す事で、コールする側ではiOSのバージョンを意識する必要が無い。
使う場所では、初期化、開く、閉じるの3行のみですむ。
何カ所もある場合には、かなり有効に感じる。
ここまではよかったのだが、少し、今までと変わってしまったところがある。
表示位置の指定が、いまいちよく分からないのだ。

もともと、popover自体が、barbuttonitemにくっついて表示するようになっていて、今回も同じだが、指定の仕方で、好きな位置に表示させる事が出来ていた。
しかし、今回は、自由に指定する事が出来ていない。
パラメータを見ていろいろと試したが、結局分からなかった。
これについては、一通り対応が終わってからもう一度調べてみる必要がありそうだ。

今回は、ひとまず、真ん中に表示するけど、これでOKにする事にした。

まだ、全ての確認が終わった訳ではないので、間違いがあるかもしれませんが、参考になればよいです。

拍手[3回]

PR

この記事にコメントする
name
title
color
mail
URL
comment
pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret (チェックを入れると管理人だけに表示できます)

リリース済みアプリ

Silmuvide


PseudoRPT


うつすと!


ChronologyMaker


LASI


3行日記


単位計算機


Marking Map Plus


交通費管理


交通費計算リスト


Markin Map


SheepSleepSheep


RootCalculator


元号変換


PieChart


MeasureShooting


SimpleMapCreator



Applivのレビュー記事
http://app-liv.jp/713163900/

ゆびてんじ


PR



Copyright ©   marble seijin の開発日記   All Rights Reserved
Design by MMIT simple_plain Powered by NINJA TOOLS
忍者ブログ [PR]