有沒有辦法使刻度線(主刻度線)成爲UIImage(自定義圖形)而不是文本? 我在我需要作爲圖標呈現的座標軸中有一個值。 我沒有看到任何代表,但也許有人知道這個訣竅?如何在Core Plot中爲圖標設置自定義刻度標記?
1
A
回答
2
軸標籤可以包含任何CPTLayer
(它是Core Animation的CALayer
的直接子類)作爲其內容。將圖像設置爲圖層背景,並使用此圖層構建自定義標籤。幾個Core Plot示例應用程序演示了自定義標籤,儘管它們都使用文本標籤。
您有您的加入自定義標籤的圖形兩種選擇:
使用
CPTAxisLabelingPolicyNone
標籤策略。創建一個包含標籤的NSSet
,並將其設置爲座標軸上的axisLabels
屬性。如果您使用此功能,請記住除了自定義標籤之外,您還必須提供主要和/或次要的勾選位置。使用任何其他標籤策略來生成勾號位置並實施軸委託方法。在您的代表中,在提供的位置創建新標籤並返回
NO
以禁止自動標籤。
埃裏克
3
接受Eric的問題,並感謝他,我爲他提供建議的解決方案運行的代碼。 也許它可以幫助別人:
if (yAxisIcons) {
int custonLabelsCount = [self.yAxisIcons count];
NSMutableArray *customLabels = [NSMutableArray arrayWithCapacity:custonLabelsCount];
for (NSUInteger i = 0; i < custonLabelsCount; i++) {
NSNumber *tickLocation = [NSNumber numberWithInt:i];
NSString *file = [yAxisIcons objectAtIndex:i];
UIImage *icon = [UIImage imageNamed:file];
CPImageLayer *layer; // My custom CPLayer subclass - see code below
CGFloat nativeHeight = 1;
CGFloat nativeWidth = 1;
if (icon) {
layer = [[CPImageLayer alloc] initWithImage:icon];
nativeWidth = 20;//CGImageGetWidth(icon.CGImage);
nativeHeight = 20;//CGImageGetHeight(icon.CGImage);
//layer.contents = (id)icon.CGImage;
if (nativeWidth > biggestCustomIconWidth) {
biggestCustomIconWidth = nativeWidth;
}
}else{
layer = [[CPImageLayer alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
}
CGRect startFrame = CGRectMake(0.0, 0.0, nativeWidth, nativeHeight);
layer.frame = startFrame;
layer.backgroundColor = [UIColor clearColor].CGColor;
CPAxisLabel *newLabel = [[CPAxisLabel alloc] initWithContentLayer:layer];
newLabel.tickLocation = [tickLocation decimalValue];
newLabel.offset = x.labelOffset + x.majorTickLength;
[customLabels addObject:newLabel];
[newLabel release];
[layer release];
}
y.axisLabels = [NSSet setWithArray:customLabels];
}
CPImageLayer.h
#import "CPLayer.h"
@interface CPImageLayer : CPLayer {
UIImage *_image;
}
-(id)initWithImage:(UIImage *)image;
@end
CPImageLayer.m
#import "CPImageLayer.h"
#import "CPLayer.h"
@implementation CPImageLayer
-(void)dealloc{
[_image release];
[super dealloc];
}
-(id)initWithImage:(UIImage *)image{
CGRect f = CGRectMake(0, 0, image.size.width, image.size.height);
if (self = [super initWithFrame:f]) {
_image = [image retain];
}
return self;
}
-(void)drawInContext:(CGContextRef)ctx{
CGContextDrawImage(ctx, self.bounds, _image.CGImage);
}
@end
享受
+0
謝謝,工作很好! – Maverick
相關問題
- 1. Core Plot的自定義軸標籤
- 2. 如何在Core Plot中使用多個自定義標籤?
- 3. 核心繪圖,自定義標籤和刻度標記
- 4. 如何在iOS中設置自定義標記圖標與標記簇Swift
- 5. 如何爲我當前的標記設置自定義標記?
- 6. 在X軸上自定義刻度標記和標籤(Excel VBA)
- 7. 如何在nvd3中在Y軸上設置自定義刻度和標籤
- 8. R - ggplot2 - 設置刻度標記間隔
- 9. 在JxMap中設置標記的自定義圖標
- 10. 如何在pyplot中正好設置10個刻度標記?
- 11. 設置自定義圖標
- 12. 如何刻度標記設置爲連續GGPLOT2傳奇邊緣
- 13. 設置自定義標記圖像會覆蓋默認標記圖標以及自定義圖標
- 14. 在對數刻度上使用自定義刻度標記的x軸間距
- 15. 將圖標設置爲自定義QFontDialog
- 16. ř圖軸刻度標記
- 17. 如何將自定義標記窗口設置爲特定標記
- 18. 在Tkinter中標記刻度
- 19. 添加自定義刻度和標籤
- 20. jqPlot自定義刻度標籤
- 21. 在matplotlib中設置刻度標籤
- 22. ALTER刻度標記
- 23. 如何在Android中將標記設置爲Google地圖標記?
- 24. 如何在Moodle主題設置中創建自定義標記?
- 25. 如何使用Core Plot設置圖表寬度?
- 26. 軸刻度標記
- 27. 自定義標籤不會顯示[core-plot]
- 28. 將地圖標記設置爲自定義顏色Android
- 29. matplotlib中的刻度標記
- 30. 如何設置只有整數的x軸刻度標記?
您的回答讓我相當吃驚,但我在CPLayer上繪製圖標itselt時遇到了問題。 CPLayer正在繪製正確,但沒有圖像(圖層的內容)。查看所用代碼的問題更新。 – Lukasz
當您說「在提供的位置創建新標籤」時,您的意思是「tickLocation」屬性?我一直在我的代表基於委託(地點)的參數設置他們,但他們都安裝在位置= 0. – Maverick