我想在 HexFiend 框架驱动的 TextView 中实现颜色。我几乎成功了,但是颜色渲染得不是很好。有什么建议吗?
I want To achieve color in a TextView driven by the HexFiend framework. I almost succeeded, but the colours don't render very well. Any suggestion?
我正在尝试在 HexFiend 框架驱动的 TextView 中实现多色文本。我已经成功地将纯黑色设置为背景,但现在我想实现多色文本。我研究了很多 HexFiend 源代码,并得出以下代码:
我对 HFStringEncodingTextRepresenter 进行了子类化,并且基本上覆盖了一种方法:styleForAttributes:ranges:
#import "HFRepresenterStringEncodingTextView.h"
#import <Cocoa/Cocoa.h>
#import <HexFiend/HexFiend.h>
#import "HFTextVisualStyleRun.h"
NS_ASSUME_NONNULL_BEGIN
@interface SpecialTextRepresenter : HFStringEncodingTextRepresenter
@end
NS_ASSUME_NONNULL_END
#import "SpecialTextRepresenter.h"
@implementation SpecialTextRepresenter
- (HFTextVisualStyleRun *)styleForAttributes:(NSSet *)attributes range:(NSRange)range {
HFTextVisualStyleRun *run = [[HFTextVisualStyleRun alloc] init];
[run setRange:NSMakeRange(0, [self.controller.byteArray length])];
[run setForegroundColor:[HFColor orangeColor]];
[run setBackgroundColor:[HFColor blackColor]];
NSMutableIndexSet *bookmarkExtents = nil;
if (! bookmarkExtents) bookmarkExtents = [[NSMutableIndexSet alloc] init];
[bookmarkExtents addIndexesInRange:NSMakeRange(0,[self.controller.byteArray length])];
if (bookmarkExtents) {
[run setBookmarkExtents:bookmarkExtents];
}
return run;
}
@end
我很高兴找到了解决方案,但不幸的是它看起来不太好:
到目前为止,我无法确定为什么行与行之间有那些彩色虚线。任何帮助是极大的赞赏。谢谢
我找到了导致彩色线条的问题。它与称为“书签”的 HexFiend 功能有关。在这种情况下不需要它,因为我们只对文本颜色感兴趣。因此,我的问题中列出的代码可以简化:
- (HFTextVisualStyleRun *)styleForAttributes:(NSSet *)attributes range:(NSRange)range {
HFTextVisualStyleRun *run = [[HFTextVisualStyleRun alloc] init];
[run setRange:NSMakeRange(0, [self.controller.byteArray length])];
[run setForegroundColor:[HFColor orangeColor]];
[run setBackgroundColor:[HFColor blackColor]];
return run;
}
结果看起来不错,正如我所期待的:
设置一种颜色覆盖上面的方法很简单,但是要做到精确range-basedmulti-colour就另当别论了。我试图通过使用 HFRepresenterTextView 的 属性 来实现这一点:
@property (nullable, nonatomic, copy) NSArray *styles;
这是一个数组,包含 HFTextVisualStyleRun 类型的对象,与我们在上述重写方法中处理的对象相同。这很棘手,因为在设置数组时,如果其中一个索引没有分配属性,框架会引发异常。一旦我得到一个干净的解决方案,我会尽快完成这个答案。谢谢
我正在尝试在 HexFiend 框架驱动的 TextView 中实现多色文本。我已经成功地将纯黑色设置为背景,但现在我想实现多色文本。我研究了很多 HexFiend 源代码,并得出以下代码: 我对 HFStringEncodingTextRepresenter 进行了子类化,并且基本上覆盖了一种方法:styleForAttributes:ranges:
#import "HFRepresenterStringEncodingTextView.h"
#import <Cocoa/Cocoa.h>
#import <HexFiend/HexFiend.h>
#import "HFTextVisualStyleRun.h"
NS_ASSUME_NONNULL_BEGIN
@interface SpecialTextRepresenter : HFStringEncodingTextRepresenter
@end
NS_ASSUME_NONNULL_END
#import "SpecialTextRepresenter.h"
@implementation SpecialTextRepresenter
- (HFTextVisualStyleRun *)styleForAttributes:(NSSet *)attributes range:(NSRange)range {
HFTextVisualStyleRun *run = [[HFTextVisualStyleRun alloc] init];
[run setRange:NSMakeRange(0, [self.controller.byteArray length])];
[run setForegroundColor:[HFColor orangeColor]];
[run setBackgroundColor:[HFColor blackColor]];
NSMutableIndexSet *bookmarkExtents = nil;
if (! bookmarkExtents) bookmarkExtents = [[NSMutableIndexSet alloc] init];
[bookmarkExtents addIndexesInRange:NSMakeRange(0,[self.controller.byteArray length])];
if (bookmarkExtents) {
[run setBookmarkExtents:bookmarkExtents];
}
return run;
}
@end
我很高兴找到了解决方案,但不幸的是它看起来不太好:
到目前为止,我无法确定为什么行与行之间有那些彩色虚线。任何帮助是极大的赞赏。谢谢
我找到了导致彩色线条的问题。它与称为“书签”的 HexFiend 功能有关。在这种情况下不需要它,因为我们只对文本颜色感兴趣。因此,我的问题中列出的代码可以简化:
- (HFTextVisualStyleRun *)styleForAttributes:(NSSet *)attributes range:(NSRange)range {
HFTextVisualStyleRun *run = [[HFTextVisualStyleRun alloc] init];
[run setRange:NSMakeRange(0, [self.controller.byteArray length])];
[run setForegroundColor:[HFColor orangeColor]];
[run setBackgroundColor:[HFColor blackColor]];
return run;
}
结果看起来不错,正如我所期待的:
设置一种颜色覆盖上面的方法很简单,但是要做到精确range-basedmulti-colour就另当别论了。我试图通过使用 HFRepresenterTextView 的 属性 来实现这一点:
@property (nullable, nonatomic, copy) NSArray *styles;
这是一个数组,包含 HFTextVisualStyleRun 类型的对象,与我们在上述重写方法中处理的对象相同。这很棘手,因为在设置数组时,如果其中一个索引没有分配属性,框架会引发异常。一旦我得到一个干净的解决方案,我会尽快完成这个答案。谢谢