«мини-карта» в UITableView - PullRequest
2 голосов
/ 16 мая 2011

Как я могу добавить «мини-карту» в мою UITableViewController?

Я бы хотел использовать тот же «дизайн / макет», что и в приложении «Карты». Пожалуйста, смотрите:

enter image description here

Ответы [ 3 ]

10 голосов
/ 16 мая 2011

Возможно, вместо использования полностью функционального MKMapView в пользовательском интерфейсе используйте Google Static Maps API .Вы можете просто отформатировать URL с соответствующим местоположением и вернуть изображение асинхронно.Вы можете вставить результаты в UIImageView :

http://maps.google.com/maps/api/staticmap?center=kakn%C3%A4stornet&size=88x88&maptype=roadmap&sensor=false

http://maps.google.com/maps/api/staticmap?center=kakn%C3%A4stornet&size=88x88&maptype=roadmap&sensor=false

Просто убедитесь, что вы кешируете результаты, чтобы не попадать на серверы Google каждый развремя, когда кто-то запускает ваше приложение.

Вот URL с маркером :

http://maps.google.com/maps/api/staticmap?center=kakn%C3%A4stornet&size=88x88&maptype=roadmap&markers=size:tiny|color:green|kakn%C3%A4stornet&sensor=false

enter image description here

4 голосов
/ 16 мая 2011

Я понял это, или, по крайней мере, почти.Спасибо @ AhmadTK.

Это мой код:

#import <MapKit/MapKit.h>
#import "RackAnnotation.h"

#import <QuartzCore/CATransaction.h>
#import <QuartzCore/CAAnimation.h>

[...]

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 0)
    {
        static NSString *CellIdentifier = @"Cell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }

        [cell.textLabel setText:theAnnotationSet._address];

        [cell.textLabel setShadowColor:[UIColor whiteColor]];
        [cell.textLabel setShadowOffset:CGSizeMake(0, 1)];

        MKMapView *mapView=[[MKMapView alloc] initWithFrame:CGRectMake(1, 1, 68, 68)];
        mapView.mapType=MKMapTypeStandard;
        mapView.showsUserLocation=NO;
        [mapView setContentMode:UIViewContentModeBottomRight];

        MKCoordinateRegion region;
        region.center=theAnnotationSet._coordinate;

        MKCoordinateSpan span;
        span.latitudeDelta = 0.01;
        span.longitudeDelta = 0.01;
        region.span=span;

        [mapView setRegion:region animated:NO];
        [mapView addAnnotation:theAnnotationSet];
        [mapView setScrollEnabled:NO];
        [mapView setUserInteractionEnabled:NO];

        UIButton *mapButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 70, 70)];
        [mapButton setBackgroundColor:[UIColor grayColor]];

        CALayer *mapLayer = mapView.layer;
        mapLayer.masksToBounds = YES;
        mapLayer.cornerRadius = 10.0;

        [mapButton addSubview:mapView];
        [mapButton setContentEdgeInsets:UIEdgeInsetsMake(1, 1, 1, 1)];

        CALayer *layer = mapButton.layer;
        layer.masksToBounds = YES;
        layer.cornerRadius = 10.0;

        [cell addSubview:mapButton];
        [cell setAccessoryView:mapButton];
        [cell setEditing:YES];

        NSLog(@"Title: %@", theAnnotationSet._address);

        return cell;

    }
    else {
        static NSString *CellIdentifier = @"Cell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }


        return cell;
    }
}

И вот результат:

enter image description here

Единственная проблема, которую ялевый получает его на левой стороне.Насколько я понимаю, это можно сделать только с помощью собственного подкласса или UITableViewCell или установки собственного представления в качестве заголовка.

Еще одна вещь, которую я оставил, чтобы выяснить, это как удалить "Googl"эта мини-карта.Я имею в виду, у меня есть это на главной карте, и теперь это просто раздражает меня.

Приветствия, Пол Пилен

2 голосов
/ 16 мая 2011

Я полагаю, что ваш пример в вопросе достигается с помощью UITableView header view.Попробуйте перетащить UIView к себе UITableView Controller и настроить его UIView.Это должно быть намного проще, чем изменить TableViewCell.

Ссылка:

Заголовок UITableView (не заголовок раздела)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...