Закругленные углы MKMapView - PullRequest
       4

Закругленные углы MKMapView

8 голосов
/ 29 августа 2009

Я создаю пользовательский UITableView с каждой из ячеек, содержащих фрагмент текста и MKMapView. Я хочу, чтобы представление карты в виде значка в ячейке имело закругленные углы, и это кажется проблемой.

Я использую пользовательский рисунок как для своего UITableViewCell, так и для MapIcon (пользовательский вид карты), который добавляю к своему UITableViewCell.

MapIcon является подклассом MKMapView, и метод рисования выглядит следующим образом:

- (void) drawRect: (CGRect) rect {

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, strokeWidth);
CGContextSetStrokeColorWithColor(context,self.strokeColor.CGColor);
CGContextSetFillColorWithColor(context, self.rectColor.CGColor);

CGFloat radius = arcRadius;

CGFloat Xmin = CGRectGetMinX(rect);
CGFloat Xmid = CGRectGetMidX(rect);
CGFloat Xmax = CGRectGetMaxX(rect);

CGFloat Ymin = CGRectGetMinY(rect);
CGFloat Ymid = CGRectGetMidY(rect);
CGFloat Ymax = CGRectGetMaxY(rect);   

CGContextBeginPath (контекст); CGContextMoveToPoint (context, Xmin, Ymid); CGContextAddArcToPoint (context, Xmin, Ymin, Xmid, Ymin, radius); CGContextAddArcToPoint (контекст, Xmax, Ymin, Xmax, Ymid, радиус); CGContextAddArcToPoint (контекст, Xmax, Ymax, Xmid, Ymax, радиус); CGContextAddArcToPoint (контекст, Xmin, Ymax, Xmin, Ymid, радиус); CGContextClosePath (контекст);

CGContextDrawPath(context, kCGPathFillStroke);

CGContextClip (контекст); CGContextEndTransparencyLayer (контекст); }

А на картах углы не округлены, как видно на скриншоте ниже:

альтернативный текст http://img190.imageshack.us/img190/948/picture1vmk.png

Если, однако, я изменю MapIcon на подкласс из UIView и использую те же пользовательские методы рисования, представление будет отлично обрезано, изображение ниже:

альтернативный текст http://img503.imageshack.us/img503/6269/picture2xkq.png

Это неправильно для меня, чтобы подкласс MKMapView таким образом и ожидал его обрезать? Любое другое закругление этих углов?

Ура, Каспа

Ответы [ 4 ]

41 голосов
/ 29 августа 2009

Самый простой способ сделать круглые углы:

#import <QuartzCore/QuartzCore.h>
myMapView.layer.cornerRadius = 10.0;
3 голосов
/ 12 сентября 2010

Просто небольшая поправка, поскольку оператор импорта является ошибкой в ​​ответе digdog.

Должно быть

#import <QuartzCore/QuartzCore.h>
myMapView.layer.cornerRadius = 10.0;
1 голос
/ 29 августа 2009

Посмотрите на последний абзац раздела Overview в справочнике по классу MKMapView :

Хотя вы не должны создавать подкласс самого класса MKMapView, ...

Я думаю, что это очень хорошо отвечает на ваш вопрос о том, следует ли вам это делать. Одна вещь, которую вы можете сделать, это поместить другой вид поверх MKMapView, который выглядит как фон для скругления углов. Если вам нужно, чтобы он был произвольного размера, вы можете попробовать метод strechableImage на UIImage.

0 голосов
/ 04 сентября 2013

Также довольно легко закруглить определенные углы, если вам нужно. Например, когда карта расположена в верхней части NSTableViewCell внутри сгруппированной NSTableView

Слегка изменено с ACEToolKit :

#import <QuartzCore/QuartzCore.h>
- (void)awakeFromNib {
CGRect rect = self.bounds;
float radius = 10.f;

// Create the path
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:rect
                                               byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight
                                                     cornerRadii:CGSizeMake(radius, radius)];

// Create the shape layer and set its path
CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.frame = rect;
maskLayer.path = maskPath.CGPath;

// Set the newly created shape layer as the mask for the view's layer
self.mapView.layer.mask = maskLayer;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...