-1

1)私の注釈はnotのタイトルとサブタイトルを示しています。私はすでにたくさん試しましたが、できません。

2)注釈が選択されている場合、注釈はウィンドウの中央に配置されます。そのため、マップが移動します。何か案が?

3)コールアウトボタンが機能しなくなりました。持って@ selector (openAnything)いますが、この機能を使用したいのですがトリガーされます- (void) mapView: (MKMapView *) mapView annotationView: (MKAnnotationView *) view calloutAccessoryControlTapped: (UIControl *) control {

質問するのに十分ですが、ここにビデオといくつかのソースコードがあり ますhttp://www.youtube.com/watch?v=Ur1aqeYEFHw&feature=youtube_gdata_player

ありがとう

TAPPMapViewControler.m

- (MKAnnotationView *)mapView:(MKMapView *)MapView viewForAnnotation:(id<MKAnnotation>)annotation {

if ([annotation isKindOfClass:[TAPPMapAnnotation class]])
{
    static NSString *shopAnnotationIdentifier = @"Filiale";

    //pinView = (MKPinAnnotationView *)
    TAPPMapAnnotationCustom* pinView = (TAPPMapAnnotationCustom*)[self.myMapView dequeueReusableAnnotationViewWithIdentifier:shopAnnotationIdentifier];
    [self.myMapView dequeueReusableAnnotationViewWithIdentifier:shopAnnotationIdentifier];
    if (pinView == nil)
    {

        // if an existing pin view was not available, create one
        TAPPMapAnnotationCustom *customPinView = [[TAPPMapAnnotationCustom alloc] initWithAnnotation:annotation reuseIdentifier:shopAnnotationIdentifier];
        customPinView.image          = [UIImage imageNamed:@"map_pin.png"];


        return customPinView;
    }
    else
    {
        pinView.annotation = annotation;
    }
    return pinView;
}
return nil;
}


-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {
TAPPMapAnnotation *theAnnotation = view.annotation;
TAPPMapAnnotationDetail *theController = [self.storyboard instantiateViewControllerWithIdentifier:@"MapAnnotationDetail"];
theController.theAnnotationId   = theAnnotation.objectId;
[self.navigationController pushViewController:theController animated:YES];

}

TAPPMapAnnotationCustom.h

#import <MapKit/MapKit.h>

@interface TAPPMapAnnotationCustom : MKAnnotationView

@property (strong, nonatomic) UIImageView *calloutView;
@property (strong, nonatomic) UILabel *title;
@property (strong, nonatomic) UILabel *subTitle;


- (void)setSelected:(BOOL)selected animated:(BOOL)animated;
- (void)animateCalloutAppearance:(BOOL)inAdd;

@end

TAPPMapAnnotationCustom.m

#import "TAPPMapAnnotationCustom.h"
#import "TAPPMapAnnotation.h"

@implementation TAPPMapAnnotationCustom


- (void)setSelected:(BOOL)selected animated:(BOOL)animated{

    [super setSelected:selected animated:animated];

    if(selected)
    {
        // Remove Image, because we set a second large one.
        self.image = Nil;
        UIImage *imageBack = [[UIImage imageNamed:@"map_pin.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 35, 0, 6)];
        self.calloutView = [[UIImageView alloc]initWithImage:imageBack];
        [self.calloutView  setFrame:CGRectMake(0,0,0,0)];
        [self.calloutView  sizeToFit];
        [self addSubview:self.calloutView ];


        // Callout Button
        UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        [rightButton addTarget:self action:@selector(openAnything) forControlEvents:UIControlEventTouchUpInside];

        rightButton.frame = CGRectMake(0
                                       , ((self.calloutView.frame.size.height-6) / 2)-(rightButton.frame.size.height / 2)
                                       , rightButton.frame.size.width
                                       , rightButton.frame.size.height);

        self.rightCalloutAccessoryView = rightButton;
        self.rightCalloutAccessoryView.hidden = YES;
        self.rightCalloutAccessoryView.alpha = 0;
        [self addSubview:self.rightCalloutAccessoryView];


        // Start Annimation 
        [self animateCalloutAppearance:YES];



    } else {
        //Start Annimation and Remove from view
        [self animateCalloutAppearance:NO];
    }
}


- (void)didAddSubview:(UIView *)subview{

    if ([[[subview class] description] isEqualToString:@"UICalloutView"]) {
        for (UIView *subsubView in subview.subviews) {
            if ([subsubView class] == [UIImageView class]) {
                UIImageView *imageView = ((UIImageView *)subsubView);
                [imageView removeFromSuperview];
            }else if ([subsubView class] == [UILabel class]) {
                UILabel *labelView = ((UILabel *)subsubView);
                [labelView removeFromSuperview];
            }
        }
    }
}


- (void)animateCalloutAppearance:(BOOL)inAdd {

    if (inAdd == YES) {

        self.rightCalloutAccessoryView.hidden = NO;

        [UIView animateWithDuration:0.4 delay:0 options: UIViewAnimationOptionTransitionNone
                         animations:^{

                             self.calloutView.frame = CGRectMake(self.calloutView.frame.origin.x
                                                                 , self.calloutView.frame.origin.y
                                                                 , self.calloutView.frame.size.width+150
                                                                 , self.calloutView.frame.size.height);

                             self.rightCalloutAccessoryView.alpha = 1;
                             self.rightCalloutAccessoryView.frame = CGRectMake(self.calloutView.frame.size.width - (self.rightCalloutAccessoryView.frame.size.width)
                                                                               , self.rightCalloutAccessoryView.frame.origin.y
                                                                               , self.rightCalloutAccessoryView.frame.size.width
                                                                               , self.rightCalloutAccessoryView.frame.size.height);


                         } completion:^(BOOL finished){ }];

    } else {


        [UIView animateWithDuration:0.4 delay:0 options: UIViewAnimationOptionTransitionNone
                         animations:^{

                             self.rightCalloutAccessoryView.alpha = 0;
                             self.rightCalloutAccessoryView.frame = CGRectMake(0
                                                                               , self.rightCalloutAccessoryView.frame.origin.y
                                                                               , self.rightCalloutAccessoryView.frame.size.width
                                                                               , self.rightCalloutAccessoryView.frame.size.height);


                             self.calloutView.frame = CGRectMake(self.calloutView.frame.origin.x
                                                                 , self.calloutView.frame.origin.y
                                                                 , self.calloutView.frame.size.width-150
                                                                 , self.calloutView.frame.size.height);




                         } completion:^(BOOL finished){

                             self.image = [UIImage imageNamed:@"map_pin.png"];
                             [self.calloutView  removeFromSuperview];
                             [self.rightCalloutAccessoryView removeFromSuperview];

                         }];
    }
}

@end
4

2 に答える 2

0

subtitleアノテーションクラスには属性が必要です。あなたのアノテーションクラスには属性がありますsubTitle

呼び出されていない場合calloutAccessoryControlTappedは、通常、MKMapviewのデリゲートが設定されていないことを示しています。ただし、アクセサリボタンは、選択されたときにのみ設定します。その理由はありますか?コールアウトウィンドウは選択されるまで表示されないため、アクセサリボタンを設定してviewForAnnotation、コールアウトウィンドウが表示されたときに表示されるようにすることをお勧めします。

于 2013-03-26T01:34:44.300 に答える
0

私は最初のものを修正します:

    TAPPMapAnnotation *theAnnotation = (TAPPMapAnnotation *)self.annotation;
    self.title           = [[UILabel alloc]init];
    self.title.font      = [UIFont systemFontOfSize:12.0];
    self.title.textColor = [UIColor whiteColor];
    self.title.backgroundColor = [UIColor clearColor];

    self.title.text      = theAnnotation.title;
    [...]
    [self.theView addSubview:self.title];
于 2013-03-26T08:45:37.080 に答える