Я пытаюсь добавить строку к представлению с помощью метода drawAtPoint:point withAttributes:attrs
, но строка не должна быть замечена нигде внутри представления, или, по крайней мере, я не могу ее увидеть (это может быть, что цвет такой же, как вид, белый).drawAtPoint не отображает текст в представлении
Следующий код является то, что я использую в viewDidLoad
моего зрения контроллера:
NSMutableDictionary *stringAttributes = [[NSMutableDictionary alloc] init];
[stringAttributes setObject:[UIColor redColor]forKey: NSForegroundColorAttributeName];
NSString *someString = [NSString stringWithFormat:@"%@", @"S"];
[someString drawAtPoint:CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2) withAttributes: stringAttributes];
Что это такое, что я делаю неправильно?
EDIT: После того, как следующие предложения @ rokjarc, я создал контроллер с drawRect
метод, который добавляет строку в текущем контексте просмотра:
#import <Foundation/Foundation.h>
@interface XYZSomeView : UIView
@end
#import "XYZSomeView.h"
#import "NSString+NSStringAdditions.h"
@implementation XYZSomeView
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
NSMutableDictionary *stringAttributes = [[NSMutableDictionary alloc] init];
[stringAttributes setObject:[UIColor redColor]forKey: NSForegroundColorAttributeName];
NSString *someString = [NSString stringWithFormat:@"%@", @"S"];
[someString drawAtPoint:CGPointMake(rect.origin.x, rect.origin.y) withAttributes: stringAttributes];
NSLog(@"%@", someString);
CGContextRestoreGState(context);
}
@end
И внутри мой взгляд, корень контроллера я инициализировать XYZSomeView
:
#import "XYZRootViewController.h"
#import "XYZSomeView.h"
@implementation XYZRootViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
XYZSomeView *someView = [[XYZSomeView alloc] init];
[self.view addSubview:someView];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
NSLog(@"%@", @"XYZRootViewController reveived memory warning");
}
@end
вопрос заключается в том, что мой drawRect
не называют, потому что я должен назвать это сам? Я думал, что этот метод следует вызвать при инициализации без необходимости называть его.
Попробуйте переместить его в 'viewWillAppear', поскольку макет представлений не будет завершен во время' viewDidLoad', поэтому метод 'CGPointMake' может не возвращать ожидаемое местоположение. – bobnoble
@rolandjitsu: Вы должны установить некоторый фрейм в someView. Для начала это может быть так же просто, как 'someView.frame = self.view.bounds;' И я бы согласился на '[super drawRect: rect];' Также попробуйте установить некоторые фиксированные координаты для первых попыток - рисунок в начале координат прямой - это не очень хорошая идея, поскольку теоретически прямой может быть чем угодно - он дает вам область зрения, которую нужно перерисовать. –
Итак, я должен использовать 'initWithFrame' вместо' init'. Я забыл, что 'XYZSomeView' не является подклассом' UIViewController'. Не могли бы вы объяснить, почему я не должен называть супер 'drawRect'? Я читал, что это хорошо, когда вы называете супер методы, прежде чем начинать с моей собственной, но, возможно, я ошибаюсь, так как я новичок в этом. – Roland