iphone - UIView 标注气泡

标签 iphone uiview interface-builder

当用户触摸标准 View 中的 UILabel 时,我希望能够执行类似 MapView 标注的操作。这不是 map View !或者我可以将鼠标悬停在新的 UIView 上吗?

有人能给我指出正确的方向吗?

谢谢

最佳答案

我最近做了这个。

您需要两个 UIView 子类:一个外部 View (绘制背景并处理消除气泡)和一个内部 View (绘制气泡本身)。我将我的称为 IMPBubbleView 和 IMPBubbleInternalView。

在IMPBubbleView中,它将自身设置为当前UIWindow的大小,然后将自身添加为窗口的 subview 。调用者必须传入气泡应指向的矩形:通过执行convertRect:toView:(UIView 上的一个方法)并传入 IMPBubbleView 来确定该矩形在窗口中的位置。

IMPBubbleView 创建一个 IMPBubbleInternalView 对象,并将其添加为 self 的 subview 。

需要确定是否有空间在矩形下方或上方绘制气泡(这样气泡就不会离开屏幕)。您可以使气泡 View 采用传入的 UIView 对象来显示在其中:这使得 API 的可重用性最高。然后您可以询问该 View 的大小。一些简单的数学运算,并设置 IMPBubbleInternalView 的 bubbleOnTop 属性。

为了实际绘制气泡本身,我移植了 Matt Gemmel 的一些代码(位于 http://mattgemmell.com/source )来为气泡轮廓创建路径。然后我用以下颜色的渐变填充它:

    CGFloat locations[5] = { 0.0, 0.5, 0.65, 0.65, 1.0 };
CGFloat components[20] = { 0.0, 0.0, 0.0, 1.0,  // Start color
                          58.0/255, 58.0/255, 58.0/255, 1.0,
                          58.0/255, 58.0/255, 58.0/255, 1.0,
                          91.0/255, 91.0/255, 91.0/255, 1.0,
                          144.0/255, 144.0/255, 144.0/255, 1.0 }; // End color

当你显示 IMPBubbleInternalView 时,你可以使用 Core Animation 让它淡入,或者稍微放大然后缩小,或者其他什么。

最后,您需要处理 IMPBubbleView 中的点击(绘制背景)。点击这里应该会消除气泡。重写touchesEnded:withEvent:并在触摸对象上使用locationInView:方法(以确保您处理的是气泡之外的点击)。

我认为这就是一切。我有很多用于添加按钮的东西(我正在模拟复制/粘贴菜单)。

关于iphone - UIView 标注气泡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1963063/

相关文章:

ios - 使用导航 Controller 将 View 复制到项目中 - "Image View"的框架在运行时会有所不同

ios - Xcode 6.1 - 我无法修改 xib 的元素

iphone - tableview在xml解析完成之前加载,数据未加载

iphone - 如何从 iOS 应用程序将视频上​​传到 YouTube?

ios - 根据 progressView 的 Progress 移动一个 UIView

iphone - 在 CGAffineTransform 之后获取 UIView 的中心

ios - Interface Builder Latest Xcode 未指向最新版本

iphone - 有没有更快的方法来绘制文本?

iphone - iPhone 中按时间顺序排列的国家/地区列表

ios - 边框未应用于全 View