使用UIPopoverBackgroundView类

12

苹果公司缺乏有关如何使用iOS5中引入的UIPopoverBackgroundView类的文档。是否有人有示例?

我尝试过子类化它,但我的Lion上的XCode 4.2缺少UIPopoverBackgroundView.h文件。

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


你确定找不到文档吗?:http://developer.apple.com/library/IOs/#documentation/UIKit/Reference/UIPopoverBackgroundView_class/Reference/Reference.html - CodaFi
CodaFI已经回答了关于文档的问题...其他主题是这个例子,http://blog.brandoncopley.com/?p=72 祝你好运 - silvaric
可能是在错误的SDK中查找? - Constantino Tsarouhas
1
谢谢使用 #import <UIKit/UIPopoverBackgroundView.h> :) - Cesar
这是一个教程:http://blog.andrewkolesnikov.com/custom-background-color-tint-for-uipopover-64835 - Andrew Kolesnikov
2个回答

15
  • 除了其他仅包含链接的答案,以下是如何完成此操作的方法。
  • 创建一个UIPopoverBackgroundView的新子类。

  • 在您的接口中声明以下内容:

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

  • 实现两个属性设置器,确保调用[self setNeedsLayout]
  • 在初始化方法中,创建两个图像视图,一个包含你的箭头(大小应该是你类方法中箭头尺寸),另一个包含你的背景图像(必须是可调整大小的图像)并将其添加为子视图。此时子视图放在哪里并不重要,因为你还没有箭头方向或偏移量。你应该确保箭头图像视图在背景图像视图上面,以便正确混合它们。
  • 实现layoutSubviews。在这里,根据arrowDirectionarrowOffset属性,你必须调整背景视图和箭头视图的框架。
    • 背景视图的框架应为self.bounds,在箭头所在的任何边缘上缩进arrowHeight
    • 箭头视图的框架应该对齐,使其中心点与self的中心点相隔arrowOffset (根据坐标轴正确对齐)。如果箭头方向不是向上,则必须更改图像方向,但我的气泡窗口只能向上,所以我没有这样做。
  • 这是我只向上子类的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];
    
        }
    }
    

3
另一个仅包含链接的答案,但自定义 UIPopoverBackgroundView 比你想象的更费力,因为文档有限。这个 Github 项目有一个完整的工作示例,为我节省了很多时间: https://github.com/GiK/GIKPopoverBackgroundView 将它集成到你自己的项目中相当简单。最棘手的部分是根据你使用的自定义图片调整 cap insets。我建议在项目中原地进行自定义,并且很容易在模拟器中验证所有弹出窗口方向和方位的用例是否正确显示,然后再将其迁移到你自己的项目中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接