Ios 使用UIPopoOverBackgroundView类

Ios 使用UIPopoOverBackgroundView类,ios,ios5,uipopoverbackgroundview,Ios,Ios5,Uipopoverbackgroundview,苹果缺少关于如何使用iOS5中引入的uipopopoverbackgroundview类的文档。有人举个例子吗 我已经尝试对它进行子类化,但是我在Lion上的XCode 4.2缺少uipopoOverBackgroundView.h 编辑:毫不奇怪,它应该作为#import导入到另一个仅链接的答案中,这是如何做到的 创建UIPopoOverBackgroundView的新子类 在界面中声明以下内容: +(UIEdgeInsets)contentViewInsets; +(CGFloat)arr

苹果缺少关于如何使用iOS5中引入的
uipopopoverbackgroundview
类的文档。有人举个例子吗

我已经尝试对它进行子类化,但是我在Lion上的XCode 4.2缺少
uipopoOverBackgroundView.h


编辑:毫不奇怪,它应该作为
#import

导入到另一个仅链接的答案中,这是如何做到的

  • 创建UIPopoOverBackgroundView的新子类
  • 在界面中声明以下内容:

    +(UIEdgeInsets)contentViewInsets;
    +(CGFloat)arrowHeight;
    +(CGFloat)arrowBase;
    
    @property(nonatomic,readwrite) CGFloat arrowOffset;
    @property(nonatomic,readwrite) UIPopoverArrowDirection arrowDirection;
    
  • 类方法很简单:
    contentViewInsets
    返回整个边框的宽度(不包括箭头),
    arrowHeight
    是箭头的高度,
    arrowBase
    是箭头的底部

  • 实现两个属性设置器,确保调用
    [self-setNeedsLayout]
  • 在初始化方法中,创建两个图像视图,一个包含箭头(应为类方法中箭头尺寸的大小),另一个包含背景图像(必须是可调整大小的图像),并将它们添加为子视图。此时将子视图放置在何处并不重要,因为没有箭头方向或偏移。您应该确保箭头图像视图位于背景图像视图的上方,以便它正确地混合在一起
  • 实现
    布局子视图
    。在这里,根据
    箭头方向
    箭头偏移
    属性,您必须调整背景视图和箭头视图的帧。
    • 背景视图的框架应为
      self.bounds
      ,在箭头所在的任何边上插入
      arrowHeight
    • 箭头视图的框架应对齐,以使中心偏离
      自身的
      中心
      (根据轴进行校正)。如果箭头方向不向上,则必须更改图像方向,但我的popover只能向上,所以我没有这样做
以下是my 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];

    }
}

另一个只提供链接的答案是,鉴于可用的文档有限,定制
UIPopoOverBackgroundView
的工作可能比您意识到的要多,而且这个github项目有一个完整的工作示例,为我节省了大量时间:


直接进入您自己的项目是相当简单的。最精细的部分是根据您使用的任何自定义图像调整cap插图。我建议您在项目中就地进行定制,因为在将其迁移到您自己的项目中之前,很容易验证所有popover方向/方向用例在模拟器中是否正确显示。

您确定找不到文档吗?:CodaFI已经回答了有关文档的问题…其他主题是此示例,幸运的是,您可能使用了错误的SDK?感谢#导入:)