Получить CGRect от NSStringFromCGRect
Я сохранил кадр (CGRect
) в NSStringFromCGRect
как мне позже получить прямоугольник?
[mDict setObject:NSStringFromCGRect(frame) forKey:@"frame"];
Мне нужно вернуть данные как?
CGRect frame = [[mDict objectForKey:@"frame"] ..?]
Существует ли метод или мне нужно разобрать строку вручную?
3 ответа
Я думаю, что вы ищете,
CGRect frame = CGRectFromString([mDict objectForKey:@"frame"]);
Я рекомендую использовать NSValue
вместо создания строкового представления.NSValue
экземпляры являются объектами и могут быть помещены в словарь
CGRect frame = CGRectMake(0.0, 0.0, 100.0, 100.0);
NSValue *value = [NSValue valueWithRect:(NSRect)frame];
NSDictionary *dict = @{@"frame" : value};
CGRect frameBack = (CGRect)[dict[@"frame"] rectValue];
NSLog(@"%@", NSStringFromRect(frameBack));
Если вам нужно строковое представление, которое легко обратимо, вы можете использовать это
CGRect frame = CGRectMake(0.0, 0.0, 100., 100.0);
NSValue *value = [NSValue valueWithRect:(NSRect)frame];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:value];
NSString *base64String = [data base64EncodedStringWithOptions:0];
NSLog(@"%@", base64String);
NSData *dataBack = [[NSData alloc] initWithBase64Encoding:base64String];
NSValue *valueBack = (NSValue *)[NSKeyedUnarchiver unarchiveObjectWithData:dataBack];
CGRect frameBack = (CGRect)[valueBack rectValue];
NSLog(@"%@", NSStringFromRect(frameBack));
Пока кто-то не найдет лучшего решения, вот что я придумал:
-(CGRect) CGRectFromNStringFromCGRect: (NSString *) string {
NSString *newString = [string stringByReplacingOccurrencesOfString:@"{" withString:@""];
newString = [newString stringByReplacingOccurrencesOfString:@"}" withString:@""];
newString = [newString stringByReplacingOccurrencesOfString:@" " withString:@""];
NSArray *array = [newString componentsSeparatedByString:@","];
if ([array count]==4) {
return CGRectMake([array[0] floatValue], [array[1] floatValue], [array[2] floatValue], [array[3] floatValue]);
} else {
return CGRectZero;
}
}
Используйте как это:
CGRect frame = [self CGRectFromNStringFromCGRect:[mDict objectForKey:@"frame"];