だいたい47度

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

iOSモダルパネルライブラリUAModalPanelのよくやる使い方

iOS開発でモダルを使いたいとき、UAModalPanelが便利です。

基本的にはUAModalPanelの子クラスを作り、contentViewプロパティに描画したいViewをaddしていけばOK。showFromPointを実行すればモダルがそのポイントから出現します。githubの他、cocoapodsからもDLできます。iOSオープンソースライブラリ徹底活用にも出ています。

ただ、ちょいちょい癖があって使い方がわからないことがあるので、よく使う部分をメモします。

1) Xibで扱いたい。
InterfaceBuilderでパネルの中身を作りたい場合。MyModalPanelというクラスを作って、同名のxibファイルがあるとします。xibではFile's OwnerをMyModalPanelとし、MyModalPanel.hで定義したbaseViewプロパティがObjectsの大本Viewになるようにしておきます。

//MyModalPanel.m
- (id)initWithFrame:(CGRect)frame
{
   if ((self = [super initWithFrame:frame])) {
       [[NSBundle mainBundle] loadNibNamed:@"MyModalPanel" owner:self options:nil];
      float topMargin = 200;
      float bottomMargin = frame.size.height - topMargin - _baseView.frame.size.height;
      float leftMargin = (frame.size.width - _baseView.frame.size.width) / 2;

      self.shouldBounce = NO;
      self.margin = UIEdgeInsetsMake(topMargin, leftMargin, bottomMargin, leftMargin);
      self.padding = UIEdgeInsetsMake(0, 0, 0, 0);
      self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
      self.cornerRadius = 0;

      [self.contentView addSubview:_baseView];
      [_baseView setFrame:self.contentView.frame];
   }
}


topMarginを適当に調整すれば、良い感じの位置に表示させてくれます。paddingはなしにするのが僕は好き。initで指定しなくても、showFromPointを実行する前にself.marginを変えてあげれば任意の場所にパネルを描画できます。

2) 左上のバツボタンを消したい。
左上にバツボタンが出てしまいますが、アプリとあまりにも感じが違う場合は消してしまいたいです。

このボタンはcloseButtonプロパティで指定されるボタンなので、単純にそれを消せばOK。他に消すボタンを作った場合は、このcloseButtonの消す処理を呼んであげるのが良いです。パネルをアニメーションで消したりとかの処理をきちんとやってくれるので。

//MyModalPanel.mのinit
   [self.closeButton setHidden:YES];

//MyModalPanel.m
- (IBAction)myCloseButtonTapped:(id)sender
{
   [self.closeButton sendActionsForControlEvents:UIControlEventTouchUpInside];
}



3) パネルの大きさを動的に変えたい。
パネル内のボタンを押したら、パネルをニョっと拡大させたいことがあります。そんなときは、パネルの中身の拡大&marginの修正&再描画が必要です。

//tapSomeButton
[UIView animateWithDuration:0.2f
   animations:^{
      self.contentView.frame = //お好みのサイズ
   }
   completion:^(BOOL finished){
      self.margin = //対応したエッジ
      [self layoutSubviews];//忘れずに
   }];


marginの修正をanimationの中で行うと、ちょっと描画が変になることがあるので、completionの中でやっています。見た目上はcompletionの中身がなくても問題ないですが、拡張した領域でのタップ感知などのためにはmarginの修正が必要です。やっておきましょう。

便利なライブラリがあると開発がとても楽ですね。
関連記事
スポンサーサイト

PageTop

コメント


管理者にだけ表示を許可する
 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。