11

Apple にはUIPopoverBackgroundView、iOS5 で導入されたクラスの使用方法に関するドキュメントがありません。誰にも例がありますか?

サブクラス化しようとしましたが、Lion の XCode 4.2 がありませんUIPopoverBackgroundView.h

編集:当然のことながら、それは次のようにインポートされているはず#import <UIKit/UIPopoverBackgroundView.h>

4

2 に答える 2

13

他のリンクのみの回答に追加するために、これがどのように行われるかを次に示します。

  • UIPopoverBackgroundViewの新しいサブクラスを作成します
  • インターフェイスで次のことを宣言します。

    +(UIEdgeInsets)contentViewInsets;
    +(CGFloat)arrowHeight;
    +(CGFloat)arrowBase;
    
    @property(nonatomic,readwrite) CGFloat arrowOffset;
    @property(nonatomic,readwrite) UIPopoverArrowDirection arrowDirection;
    
  • クラスメソッドは単純ですcontentViewInsets。境界線の幅(矢印を含まない)を返し、矢印arrowHeightの高さ、矢印arrowBaseの基部を返します。

  • 2つのプロパティセッターを実装します。必ず。を呼び出して[self setNeedsLayout]ください。
  • 初期化メソッドで、2つの画像ビューを作成します。1つは矢印(クラスメソッドの矢印の寸法のサイズである必要があります)を保持し、もう1つは背景画像(サイズ変更可能な画像である必要があります)を保持し、これらをサブビューとして追加します。矢印の方向やオフセットがないため、この時点でサブビューをどこに配置してもかまいません。矢印の画像ビューが背景の画像ビューの上にあることを確認して、適切にブレンドされるようにする必要があります。
  • を実装しlayoutSubviewsます。arrowDirectionここでは、とのプロパティに従ってarrowOffset、背景ビューと矢印ビューのフレームを調整する必要があります。
    • 背景ビューのフレームは、矢印が付いているエッジにself.bounds挿入されている必要がありますarrowHeight
    • 矢印ビューのフレームは、中心がarrowOffsetの中心から離れるように位置合わせする必要がありますself(軸に従って正しい)。矢印の方向が上でない場合は、画像の向きを変更する必要がありますが、ポップオーバーは上にしか表示されないため、変更しませんでした。

Up-onlyサブクラスのlayoutSubviewsメソッドは次のとおりです。

-(void)layoutSubviews
{
    if (self.arrowDirection == UIPopoverArrowDirectionUp)
    {
        CGFloat height = [[self class] arrowHeight];
        CGFloat base = [[self class] arrowBase];

        self.background.frame = CGRectMake(0, height, self.frame.size.width, self.frame.size.height - height);

        self.arrow.frame = CGRectMake(self.frame.size.width * 0.5 + self.arrowOffset - base * 0.5, 1.0, base, height);
        [self bringSubviewToFront:self.arrow];

    }
}
于 2012-09-07T08:40:14.530 に答える
2

別のリンクのみの回答UIPopoverBackgroundViewですが、利用可能なドキュメントが限られていることを考えると、カスタマイズはあなたが気付くよりも多くの作業であり、この github プロジェクトには完全に機能する例があり、多くの時間を節約できました: https://github.com/GiK/GIKPopoverBackgroundView

独自のプロジェクトにドロップするのはかなり簡単です。最も厄介な部分は、使用しているカスタム イメージに合わせてキャップ インセットを調整することです。プロジェクトでその場でカスタマイズを行うことをお勧めします。独自のプロジェクトに移行する前に、すべてのポップオーバーの向き/方向のユースケースがシミュレーターで正しく表示されることを簡単に確認できます。

于 2015-11-12T23:47:43.710 に答える