2016-10-08 8 views
1

私はいくつかのカスタムビューコントローラのトランジションを行っていますが、押したボタンの中央からトランジションを開始したいと思います。UIBarButtonItemの中心位置を取得する方法

myCustomTransition.startingPoint = buttonPressed.center 

をしかし、私はUIBarButtonItemを使用したい場合、私はどのcenterプロパティが表示されていないので、どのように実際には、ボタンの中心から開始するように私の移行を伝えるために:

UIButtonのために私が行うことができますUIBarButtonItemにあります。

提案がありますか?

+0

ナビゲーションバーの中央にボタンを配置する必要があります。 – vaibhav

+0

@vaibhav:いいえ、私のボタンは右側にありますが、私はその位置を知る必要がありますが、私が読んでいるところでは、UIBarButtonItemの境界にアクセスする方法はありません。 – Kobe

+0

大丈夫です。ナビゲーションバーの中央にUIViewを配置し、右と左の端まで展開して境界を取得する場合は、そのまま進みます。 – vaibhav

答えて

1

UIBarButtonItemをnavigationItem.leftBarButtonItemまたはnavigationItem.rightBarButtonItemとして使用するだけでは、UIBarButtonItemがUIViewを継承しないため、ジオメトリプロパティを直接取得することはできませんが、最終的にトリッキーメソッドを使用してジオメトリプロパティを取得できます。

これは残っているシンプルなViewControllerを、右UIBarButtonItemのhierachyです:

enter image description here

UINavigationButtonあなたのターゲットである、そのRECTを取得し、あなたが必要なものの中心を得ることができます。

- (void)handleItemPressed { 
UIView *targetView = nil; 
for (UIView *subView in self.navigationController.navigationBar.subviews) { 
    if ([subView isKindOfClass:NSClassFromString(@"UINavigationButton")]) { 
     for (UILabel *label in subView.subviews) { 
      if ([label isKindOfClass:[UILabel class]]) { 
       if ([label.text isEqualToString:"right"]) { 
        targetView = subView; 
        break; 
       } 
      } 
     } 
    } 
} 

CGRect rect = [targetView convertRect:targetView.frame toView:self.view]; 
CGPoint center_you_need = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); 
} 

customeViewを使用する場合は、customeViewのフレームをポイントに変換するだけです。

関連する問題