使用UIPopoverBackgroundView类

时间:2011-11-20 23:59:29

标签: ios ios5 uipopoverbackgroundview

Apple缺少有关如何使用iOS5中引入的UIPopoverBackgroundView类的文档。有人有例子吗?

我试图将其子类化,但我在Lion上的XCode 4.2缺少UIPopoverBackgroundView.h

编辑: 不出所料,它本应导入为#import <UIKit/UIPopoverBackgroundView.h>

2 个答案:

答案 0 :(得分:13)

要添加到另一个,仅限链接的答案,以下是这样做的方法。

  • 创建UIPopoverBackgroundView的新子类<​​/ li>
  • 在您的界面中声明以下内容:

    +(UIEdgeInsets)contentViewInsets;
    +(CGFloat)arrowHeight;
    +(CGFloat)arrowBase;
    
    @property(nonatomic,readwrite) CGFloat arrowOffset;
    @property(nonatomic,readwrite) UIPopoverArrowDirection arrowDirection;
    
  • 类方法很简单:contentViewInsets一直返回边框的宽度(不包括箭头),arrowHeight是箭头的高度,{{1} }是你的箭头的基础。

  • 实施两个属性设置器,确保调用arrowBase
  • 在初始化方法中,创建两个图像视图,一个保持箭头(应该是类方法中箭头尺寸的大小),另一个保存背景图像(必须是可调整大小的图像)并将其添加为子视图。此时将子视图放在何处并不重要,因为您没有箭头方向或偏移。您应确保箭头图像视图位于背景图像视图上方,以便正确混合。
  • 实施[self setNeedsLayout]。在此处,根据layoutSubviewsarrowDirection属性,您必须调整背景视图和箭头视图的帧。
    • 背景视图的框架应为arrowOffset,由self.bounds插入箭头所在的任何边缘
    • 箭头视图的框架应对齐,以使中心距离arrowHeight的中心arrowOffset(根据轴校正)。如果箭头方向不对,你必须改变图像方向,但我的弹出窗口只会向上,所以我没有这样做。

以下是我的Up-only子类的self方法:

layoutSubviews

答案 1 :(得分:1)

另一个链接只回答,但是定制UIPopoverBackgroundView比你可能意识到的更多的工作,因为可用的文档有限,这个github项目有一个完整的工作示例,为我节省了大量时间:https://github.com/GiK/GIKPopoverBackgroundView < / p>

投入自己的项目相当简单。最琐碎的部分是为您使用的任何自定义图像调整上限。我建议您在项目中现场进行自定义,并且在将其迁移到您自己的项目之前,可以轻松验证所有弹出方向/方向用例在模拟器中正确显示。