2009-08-29 2 views
8

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

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

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

- (недействительными) DrawRect: (CGRect) прямоугольник {

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 (контекст, Xmin, Ymid); CGContextAddArcToPoint (контекст, 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 (контекст); }

И карты не получают углы rouned, как можно видеть на скриншоте ниже:

alt text http://img190.imageshack.us/img190/948/picture1vmk.png

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

alt text http://img503.imageshack.us/img503/6269/picture2xkq.png

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

Приветствия, Каспа

+0

ли вы, что помещение MapView здесь происходит сбой, когда он выходит и повторно вводит представление? –

ответ

39

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

#import <QuartzCore/QuartzCore.h> 
myMapView.layer.cornerRadius = 10.0; 
+0

Работает как шарм, спасибо! Время, чтобы сесть и прочитать больше на CA, я думаю. – Kaspa

+0

: -o Удивительно, что вы можете узнать из документации! –

+0

его cornerRadius, а не cornerRadious – samvermette

1

Посмотрите на последний абзац Обзор раздела в MKMapView class reference:

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

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

+1

Эта записка о подклассе написана в контексте получения информации о поведении карт. Я должен уметь подклассифицировать его на mainpulate UIView (как описано в digdog) – Kaspa

3

Просто небольшой коррекции, как оператор импорта орфографическими ошибками в ответ digdog в.

Должно быть

#import <QuartzCore/QuartzCore.h> 
myMapView.layer.cornerRadius = 10.0; 
0

Это также довольно легко округлить определенные углы, если вам нужно. Например, когда карта находится в верхней части 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; 
} 
Смежные вопросы