Пример кода будет сложным, если не считать требований, кроме этого скриншота, который, по-видимому, не очень хорошо организован с самого начала.
Самый простой способ - просто получить текст, разбить его на словаа затем расположите их в свободном месте.Будь то ограничивающий взгляд или что-то еще.Вы также захотите иметь данные заметок, чтобы определить, где будет пустое пространство.Это может быть просто индекс (т. Е. Если его слово 4, 4).
Просто создайте подкласс представления и используйте базовую графику.
Элементарная версия:
- (void) awakeFromNib
{
self.words = [NSArray arrayWithObjects:@"It ", @"has ", @"to ", @"be ", @"_", @"before ", @"it ", @"can ", @"multiply.", nil];
blank = 4;
}
- (void) drawRect:(CGRect)theRect
{
CGRect rect = self.textView.frame; // reference view
CGContextRef context = UIGraphicsGetCurrentContext();
if(context == nil)
return;
CGContextSelectFont(context, "Helvetica", 20, kCGEncodingMacRoman);
CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0, -1.0));
CGContextSetRGBFillColor(context, 1, 1, 1, 1);
CGContextSetRGBStrokeColor(context, 1, 1, 1, 1);
float x = rect.origin.x;
float y = rect.origin.y + 20; // since text is flipped adjust our y (based on font size)
float width = rect.size.width;
CGContextSetTextPosition(context, x, y);
int index = 0;
for(NSString * word in self.words)
{
CGPoint startPos = CGContextGetTextPosition(context);
if(index == blank)
{
CGRect box = self.textField.frame;
box.origin = startPos;
box.origin.y -= 22; // since text is flipped adjust our y (based on font size)
self.textField.frame = box;
CGContextSetTextPosition(context, x + box.size.width + 35, y); // + arbitrary space
index++;
continue;
}
CGContextSetTextDrawingMode(context, kCGTextInvisible);
CGContextShowText(context, [word UTF8String], [word length]);
CGPoint endPos = CGContextGetTextPosition(context);
x = startPos.x;
if(endPos.x > width)
{
// next line
x = rect.origin.x;
y += 22;
}
CGContextSetTextDrawingMode(context, kCGTextFillStroke);
CGContextShowTextAtPoint(context, x, y, [word UTF8String], [word length]);
index++;
}
CGContextRelease(context);
}
Этопроизводит это:
1011 *
1014 * проект простой вид, я создал
UIView
в качестве опорного кадра, на который связан текст, и
UITextField
, что ядвигаться на место.Вы можете дублировать более одного такого предложения на экране.Пробел - это просто заполнитель для упрощения циклической обработки, индекс - это то, что определяет, где отображается поле.