2009-08-29 14 views
8

私はカスタムのUITableViewを、テキストとMKMapViewを含む各セルで構築しています。私は、セル内のマップの「アイコン」ビューに角を丸くして、これが問題であるように思っています。MKMapViewの角を丸くしたもの

私は自分のUITableViewCellと私のUITableViewCellに追加する私のMapIcon(カスタムマップビュー)の両方にカスタム図面を使用しています。

MapIconMKMapViewのサブクラスであり、次のように描画方法は、見える:

- (ボイド)の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(コンテキスト、Xmin、Ymin、Xmid、Ymin、radius); CGContextAddArcToPoint(コンテキスト、Xmax、Ymin、Xmax、Ymid、radius); CGContextAddArcToPoint(コンテキスト、Xmax、Ymax、Xmid、Ymax、radius); CGContextAddArcToPoint(コンテキスト、Xmin、Ymax、Xmin、Ymid、radius); CGContextClosePath(context);

CGContextDrawPath(context, kCGPathFillStroke); 

CGContextClip(コンテキスト)。 CGContextEndTransparencyLayer(context); }

、以下のスクリーンショットで見ることができるようにコーナーは、rouned取得しないマップ:

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

がしかし、もし私はUIViewのからサブクラスと同じを使用するようにMapIconを変更カスタム描画方法、ビューは画像の下に、完全にクリップされます:

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

MKMapViewをそのような方法でサブクラス化してクリップすることを期待しているのは間違っていますか? これらのコーナーを四捨五入したものは他にもありますか?

乾杯、 Kaspa

+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クラス自体をサブクラスではないはずですが、...

私はそれがサブクラス化すべきかどうかという疑問に答えることができると思います。あなたができることの1つは、コーナーを丸めるために背景のように見えるMKMapViewの上に別のビューを配置することです。任意のサイズにする必要がある場合は、でstrechableImageメソッドを試すことができます。

+1

そのサブクラス化ノートは、マップの動作に関する情報を取得するコンテキストで記述されています。私はUIViewをmainpulateするためにそれをサブクラス化することができるはずです(ちょうどdigdogが説明したように) – Kaspa

3

import文としてほんの少しの修正がdigdogの答えにつづりの間違っています。

はあなたが必要とする場合には、特定の角を丸めることもかなり簡単です

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

であるべき。たとえば、ときマップが少しACEToolKitから変更

グループ化 NSTableView内NSTableViewCellの最上部に位置しています:

#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; 
} 
関連する問題