单击第二个vc中的按钮后,是否可以对mkmapview的区域进行动画处理,该按钮覆盖了具有清晰背景颜色的地图



我想做的只是创建类似于Apple为iPhone创建的"查找我的朋友"应用程序的功能。我用mapview创建了主视图,然后我创建了另一个视图控制器,它显示在主屏幕上,背景清晰的颜色,所以我可以在后台看到地图。我现在要做的就是更改显示注释的区域。有没有办法从已经处于活动状态的子视图控制器触发动画?

当然,这相当简单。有三个基本部分。

第一:您可能已经注意到,如果使用presentViewControllerUINavigationControllerpresent…方法添加另一个视图控制器,则添加新视图时,其背后的视图将从视图层次结构中删除。当您的透明视图移入时,您将看到黑色的闪烁。

此处需要做的是将视图控制器添加为视图控制器(有关视图控制器包含的详细信息,请参阅 Apple 的文档)。

因此,第一步是使用 addChildViewController 添加视图控制器,addSubview添加该子视图。

其次,您需要一种让第二个视图控制器(我称它们为"A"和"B")与第一个('A')视图控制器通信的方法。因此,它需要对它的引用。这是标准的委托模式。可能只是使用类似 initWithFrame:(frame) mapViewController:(id<MyMapViewControllerProtocol>)delegate 的方法初始化您的视图控制器。

然后,在按下按钮时,在委托上调用方法。由于委托托管地图,因此它可以执行所需的任何操作。阅读委托模式,了解有关此模式的更多信息。

第三,如果你想让地图是交互式的,你会发现它上面的视图捕捉到触摸,而它们永远不会到达地图。或者,如果您使其不捕获触摸,则其上的任何控件都不起作用。

要解决此问题,请将视图设置为UIView的自定义子类。这是我的TouchTransparentView:

#import "TouchTransparentView.h"
@implementation TouchTransparentView
-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    id hitView = [super hitTest:point withEvent:event];
    if (hitView == self) {
        return nil;
    } else {
        return hitView;
    }
}
@end

最新更新