首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以从MKPolyline继承

是否可以从MKPolyline继承
EN

Stack Overflow用户
提问于 2011-02-10 02:41:30
回答 6查看 2.8K关注 0票数 9

我正在为iPhone构建一个基于MapKit的应用程序。

我有一些MKPolylines添加到地图中。

但是,我希望将符合MKOverlay协议的模型类添加到映射中,而不是拥有MKPolyline,以便在mapView:viewForOverlay中创建相应视图时可以访问模型属性。

问题是我找不到从MKPolyline继承的方法,因为它没有任何可以从子类‘init’调用的初始化方法。您只能使用方便的方法创建它们。

如何将模型属性和MKPolyline行为结合在一起?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-04 22:40:31

你可以对这个类进行set an associated object attribute。这允许您将实例变量绑定到现有类。确保你在自己之后适当地清理干净。

票数 4
EN

Stack Overflow用户

发布于 2012-05-18 01:37:06

MANIAK_dobrii的代码是可行的,但我发现我必须实现一些额外的MKMultiPoint方法才能让它工作,下面是我使用的AnchorLine类的完整头文件和实现文件:

标题AnclLine.h

代码语言:javascript
复制
#import <MapKit/MapKit.h>

@interface AnchorLine : NSObject <MKOverlay> {
    MKPolyline* polyline;
}

@property (nonatomic, retain) MKPolyline* polyline;

+ (AnchorLine*)initWithPolyline: (MKPolyline*) line;
@end

实现AnclLine.m

代码语言:javascript
复制
#import "AnchorLine.h"

@implementation AnchorLine

@synthesize polyline;


+ (AnchorLine*)initWithPolyline: (MKPolyline*) line {
    AnchorLine* anchorLine = [[AnchorLine alloc] init];
    anchorLine.polyline = line;
    return [anchorLine autorelease];
}

- (void) dealloc {
    [polyline release];
    polyline = nil;
    [super dealloc];
}

#pragma mark MKOverlay
//@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
- (CLLocationCoordinate2D) coordinate {
    return [polyline coordinate];
}

//@property (nonatomic, readonly) MKMapRect boundingMapRect;
- (MKMapRect) boundingMapRect {
    return [polyline boundingMapRect];
}

- (BOOL)intersectsMapRect:(MKMapRect)mapRect {
    return [polyline intersectsMapRect:mapRect];
}

- (MKMapPoint *) points {
    return [polyline points];
}


-(NSUInteger) pointCount {
    return [polyline pointCount];
}

- (void)getCoordinates:(CLLocationCoordinate2D *)coords range:(NSRange)range {
    return [polyline getCoordinates:coords range:range];
}

@end

希望这能帮助到一些人。

票数 7
EN

Stack Overflow用户

发布于 2011-03-04 06:38:26

MKPolyline确实没有自己的初始化方法。事实上,在MKPolyline的继承链中,唯一有初始化方法的类是NSObject。

因此,当我创建MKPolyline的子类时,我只是覆盖了NSObject定义的init方法...

代码语言:javascript
复制
-(id) init {
    self = [super init];
    if(self) {
        //my initialization here
    }
    return self;
}

然后,当你想用坐标实例化你的子类时,你可以这样做…

代码语言:javascript
复制
-MyPolyline* myPolyline = (MyPolyline*)[MyPolyline polylineWithCoordinates:coordinates count:coordinateCount];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4949069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档