Apple にはUIPopoverBackgroundView
、iOS5 で導入されたクラスの使用方法に関するドキュメントがありません。誰にも例がありますか?
サブクラス化しようとしましたが、Lion の XCode 4.2 がありませんUIPopoverBackgroundView.h
編集:当然のことながら、それは次のようにインポートされているはず#import <UIKit/UIPopoverBackgroundView.h>
Apple にはUIPopoverBackgroundView
、iOS5 で導入されたクラスの使用方法に関するドキュメントがありません。誰にも例がありますか?
サブクラス化しようとしましたが、Lion の XCode 4.2 がありませんUIPopoverBackgroundView.h
編集:当然のことながら、それは次のようにインポートされているはず#import <UIKit/UIPopoverBackgroundView.h>
他のリンクのみの回答に追加するために、これがどのように行われるかを次に示します。
インターフェイスで次のことを宣言します。
+(UIEdgeInsets)contentViewInsets;
+(CGFloat)arrowHeight;
+(CGFloat)arrowBase;
@property(nonatomic,readwrite) CGFloat arrowOffset;
@property(nonatomic,readwrite) UIPopoverArrowDirection arrowDirection;
クラスメソッドは単純ですcontentViewInsets
。境界線の幅(矢印を含まない)を返し、矢印arrowHeight
の高さ、矢印arrowBase
の基部を返します。
[self setNeedsLayout]
ください。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];
}
}
別のリンクのみの回答UIPopoverBackgroundView
ですが、利用可能なドキュメントが限られていることを考えると、カスタマイズはあなたが気付くよりも多くの作業であり、この github プロジェクトには完全に機能する例があり、多くの時間を節約できました: https://github.com/GiK/GIKPopoverBackgroundView
独自のプロジェクトにドロップするのはかなり簡単です。最も厄介な部分は、使用しているカスタム イメージに合わせてキャップ インセットを調整することです。プロジェクトでその場でカスタマイズを行うことをお勧めします。独自のプロジェクトに移行する前に、すべてのポップオーバーの向き/方向のユースケースがシミュレーターで正しく表示されることを簡単に確認できます。