当用户触摸标准 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/