- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我努力实现这一点。我有一个类,它是 NSObject 的子类,表示 map 上的注释。在该类中,当用户按下注释时,我有一个警报 View 。我想做的是,在用户从警报中按确定后,我想将图钉的颜色从红色更改为绿色。
下面是我的 MKAnnotation 类...
。H
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
#import "MapMenu.h"
@interface BuildingViewController : NSObject <MKAnnotation, MapMenuDelegate>{
NSString *name;
NSString *description;
CLLocationCoordinate2D location;
NSString *owner; /*user object*/
}
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *owner;
@property (nonatomic, retain) IBOutlet MapMenu *menu;
- (id) initBuildingWithName: (NSString *) _name andCoordinates: (CLLocationCoordinate2D) _location
shortDescription:(NSString *)_description andOwner:(NSString *)_owner inDistance: (NSInteger) _distance;
- (void) addMenuOnView: (MKMapView*) mapView;
- (void) hideMenuFromView;
- (void) setAttackEnable: (BOOL) attack;
- (void) attackTo: (BuildingViewController*) selectedBuilding;
@end
#import "BuildingViewController.h"
#import "CountDownTimer.h"
@implementation BuildingViewController{
MapMenuItem* starMenuItem1, *starMenuItem2,
*starMenuItem3, *starMenuItem4;
NSInteger distance;
MKMapView* parentView;
}
@synthesize title, subtitle, coordinate, owner, menu = _menu;
- (id) initBuildingWithName:(NSString *)_name andCoordinates:(CLLocationCoordinate2D)_location
shortDescription:(NSString *)_description andOwner:(NSString *)_owner inDistance:(NSInteger)_distance{
self = [super init];
title = _name;
coordinate = _location;
subtitle = _description;
owner = _owner;
distance = (int)round(_distance);
UIImage *storyMenuItemImage = [UIImage imageNamed:@"bg-menuitem.png"];
UIImage *storyMenuItemImagePressed = [UIImage imageNamed:@"bg-menuitem-highlighted.png"];
UIImage *starImage = [UIImage imageNamed:@"icon-star.png"];
starMenuItem1 = [[MapMenuItem alloc] initWithImage:storyMenuItemImage highlightedImage:storyMenuItemImagePressed
contentImage:starImage highContentImage:nil isDisable:NO];
starMenuItem2 = [[MapMenuItem alloc] initWithImage:storyMenuItemImage highlightedImage:storyMenuItemImagePressed
contentImage:starImage highContentImage:nil isDisable:NO];
starMenuItem3 = [[MapMenuItem alloc] initWithImage:storyMenuItemImage highlightedImage:storyMenuItemImagePressed
contentImage:starImage highContentImage:nil isDisable:NO];
starMenuItem4 = [[MapMenuItem alloc] initWithImage:storyMenuItemImage highlightedImage:storyMenuItemImagePressed
contentImage:starImage highContentImage:nil isDisable:NO];
if (distance > 10){
[self setAttackEnable:NO];
starMenuItem1.disable = YES;
}
NSArray *menus = [NSArray arrayWithObjects:starMenuItem1, starMenuItem2, starMenuItem3, starMenuItem4, nil];
_menu = [[MapMenu alloc] initWithFrame:self.menu.bounds menus:menus];
_menu.delegate = self;
return self;
}
- (void) addMenuOnView:(MKMapView *)mapView{
parentView = mapView;
[parentView addSubview: _menu];
}
- (void) hideMenuFromView{
[_menu removeFromSuperview];
}
- (void) setAttackEnable:(BOOL)attack{
if (attack) {
[starMenuItem1 setHighlighted:NO];
}else{
[starMenuItem1 setHighlighted:YES];
[starMenuItem1 setImage:[UIImage imageNamed:@"bg-menuitem-highlighted.png"]];
}
}
- (void)MapMenu:(MapMenu *)menu didSelectButton:(NSInteger)index{
NSLog(@"Select the index : %d\n",index);
NSLog(@"%@", self.owner);
if (index == 0) {
if (self.owner == nil && distance < 10) {
CountDownTimer* countDown = [[CountDownTimer alloc]init];
[countDown startTimerOn:parentView];
[self performSelector:@selector(attackTo:) withObject:nil afterDelay:20.0];
}
else if (self.owner == @"Player_1")
NSLog(@"You have already occupy this building with name, %@", self.title);
}
}
- (void) attackTo: (BuildingViewController*) selectedBuilding{
self.owner = @"Player_1";
[self showMessage:@"Success" withContent:@"You are the new owner of the building."];
//NSLog(@"Building has a new owner with name, %@", self.owner);
}
- (void) showMessage: (NSString*) msgTitle withContent: (NSString*) content{
UIAlertView *message = [[UIAlertView alloc] initWithTitle:msgTitle
message:content
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[message show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 0) {
//I want to change the pin colour here.
}
}
@end
Sending 'MKPinAnnotationView *__strong' to parameter of incompatible type 'id<MKAnnotation>'
当我运行应用程序时,按确定时它会崩溃。我不知道我做错了什么。
最佳答案
我正在试一试,不确定它是否会起作用。
在注释中添加一个属性:
@property (nonatomic) BOOL annotationWasSelected;
TRUE
当用户关闭 UIAlertView 时(将其初始化为
FALSE
)。
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 0) {
_annotationWasSelected = TRUE;
// Remove and add the annotation so it's re-drawn
[parentView removeAnnotation:self];
[parentView addAnnotation:self];
}
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
static NSString *identifier = @"MyAnnotation";
MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [_mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
YourAnnotationClass *myAnnotation = (YourAnnotationClass*) annotation;
// If a new annotation is created
if (annotationView == nil) {
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:myAnnotation reuseIdentifier:identifier];
// Annotation's color
if (myAnnotation.annotationWasSelected) {
annotationView.pinColor = MKPinAnnotationColorGreen;
}
else {
annotationView.pinColor = MKPinAnnotationColorRed;
}
} else {
annotationView.annotation = annotation;
// Annotation's color
if (myAnnotation.annotationWasSelected) {
annotationView.pinColor = MKPinAnnotationColorGreen;
}
else {
annotationView.pinColor = MKPinAnnotationColorRed;
}
}
return annotationView;
}
关于objective-c - 从 MKAnnotation 对象更改图钉颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13514624/
我在 MKAnnotation 上有一个标注。标注上的附件应该在点击时更改 MKAnnotationView 的图像。有没有办法改变这个,而无需重新创建 MKAnnotation?我问的原因是我想更改
我正在使用 MKMapview 在我的原生 iPhone 应用程序中显示 map ,并向 map View 添加两个标记。单击注释标记时,我希望显示一个电话号码,然后单击电话号码应该调用该号码。 我怎
我正在开发一个 tvOS 应用程序,我希望能够在注释之间滑动。我将注释存储在字典中,并将字典存储在数组中以备将来使用。我只是为加拿大、美国和墨西哥绘制了三个注释。我希望能够在这些注释之间滑动 Remo
为了在 Swift 中向 mapview 添加注释,我有这段有效的代码,例如: 让 myLocation = CLLocationCoordinate2D(55.55, -77.77) let ann
我可以创建一个 MKAnnotation,还是只读的?我有坐标,但我发现使用 setCooperative 手动创建 MKAnnotation 并不容易。 想法? 最佳答案 MKAnnotation
我有一个 MKMapView 查询服务器并在中心更改时显示一组 MKAnnotations 但我遇到重复 MKAnnotations 的问题,因为我阅读并添加了它们。 我正在考虑用 for 查看每个注
我有一个对象列表,每个对象都有标题、名称、描述、纬度、经度和地址。 是否可以将此对象显示为 MKAnnotations?我已经坚持了几个小时了。当我尝试使对象具有 CLLocationCoordina
class Point: NSObject, MKAnnotation { var id: String? var title: String? var coordinate: CLLocationC
在我的应用程序出现问题后,我为 MKMapView 编写了一个测试应用程序。我的问题是我无法在 map 上放置多个图钉。在 viewDidLoad: 方法中使用此代码,应在指定坐标的对角线上显示 10
到目前为止,我已经在一些应用程序中看到了这一点,当用户缩小时,注释会彼此靠得更近,如果它们靠得太近,则会被替换为例如“+5”别针或其他东西。 该怎么做?我认为应该在 regionDidChangeAn
MKAnnotation 有问题。有一个自定义的 pinview 并且在第一次加载时工作正常。去删除引脚,然后重新加载相同的引脚,它们会改变颜色。我从两个不同的数据库中添加引脚并且工作正常。移除并分别
我知道之前有一个关于这个的问题。但是,我觉得有点菜鸟,因为我无法解决它。 尝试此操作时出现错误: MKAnnotation *annotation = [[MKAnnotation alloc] in
我正在尝试将 MKAnnotations 保存到我正在学习的类(class)中的项目的核心数据中。 我查看了 github 上其他学生的代码,他们都采用相同的方法创建自定义 NSManagedObje
我在 map 上显示了几个图钉,就像这样: for (int i = 0; i )annotation { static NSString *identifier = @"CarPin"; if ([
我在我的 map 中使用自定义图标作为注释。大约有 200 个引脚。 在模拟器中,我的 map 看起来像这张图片。 但是,在我的设备中,有一些红点注释靠近我的用户位置。就像下图所示。 我猜这是速度引起
我已经阅读了很多关于 MKAnnotation 的内容以及您需要如何在您的子类中实现 setCoordinate 以及 draggable=TRUE 的顺序使整个 shebang 可拖动。 我的情况是
在我的应用程序中,我正在显示一个 TableView ,其中包含从数据库中搜索用户的结果。现在在该 TableView 中有一个按钮,通过单击该用户可以在 map 中查看所有搜索到的用户的位置。当用户
亲切的问候, 我正在使用下面的代码在 iOS 上显示注释 mkmapview在 map 上点击时。 MKPointAnnotation *aAnnotationPoint = [[MKPointAnn
我有一个 MKMapView,它有一个图钉,按下时会显示注释的标题和副标题。 代码中是否有一种方法可以自动显示此文本,以便用户无需单击它? 如果我有很多图钉,它们是否也能同时出现? 最佳答案 您需要使
我有一个 map View Controller (UIViewController、MKMapView)及其委托(delegate)(HCIResultMapViewController)。 我希望
我是一名优秀的程序员,十分优秀!