Как применить пользовательский путь Безье к UITextView внутри UITableViewCell

Я работаю с UITableViewCell. Ячейка содержит несколько изображений, метку и UITextView. Я хочу, чтобы UITextView отображался с другими видами в качестве путей исключения. Так что внутри моего класса MyUITableViewCell, у меня есть следующий код внутри метода awakeFromNib,

UIBezierPath *image =[UIBezierPath bezierPathWithRect:self.animalImageView.bounds];
UIBezierPath *label =[UIBezierPath bezierPathWithRect:self.animalTitleView.bounds];
UIBezierPath *rating =[UIBezierPath bezierPathWithRect:self.ratingOfAnimal.bounds];

self.animalBioTextView.bounds=self.bounds;//resize textview to fill table cell; exclusions will come later
self.animalBioTextView.textContainer.exclusionPaths=@[image, label, rating];//apply exclusions
NSLog(@"Bezier path set");

Ни одно из этого редактирования, кажется, не вступило в силу.

BWT: я объявил TableViewCell в раскадровке прямо внутри UITableView. Затем я связал ячейку раскадровки с MyUITableViewCell и пошел оттуда. Чтобы уточнить: все работает отлично; кроме теперь, когда я должен настроить textContainer.

--ОБНОВИТЬ--

Я думал, что мой пример кода показывает, что я хочу сделать, но вот еще несколько объяснений:

  • Я хочу, чтобы текстовое представление было смежным со TableViewCell со всех сторон. Поскольку я не смог сделать это в раскадровке, я добавил следующую строку в коде: self.animalBioTextView.bounds=self.bounds

  • так как текстовое представление является смежным с ячейкой, тогда я должен иметь возможность "легко" использовать границы дочерних представлений и передавать их в textView. Но, очевидно, границы в отношении самих детей. Итак, как мне получить координаты относительно UITableViewCell? который в моем случае self

2 ответа

Ты можешь использовать convertRect:fromView: чтобы получить координаты относительно текстового представления. Например:

CGRect animalImageRect = [self.animalBioTextView convertRect:self.animalImageView.bounds fromView:self.animalImageView];
UIBezierPath *imagePath = [UIBezierPath bezierPathWithRect:animalImageRect];

Во-первых, вы забыли подумать о системах координат. Границы других взглядов каждый относительно себя; например, их границы происхождения все (0,0), Но пути исключения должны быть заданы относительно собственного происхождения границ текстового контейнера (проецируемого в реальное пространство); очень маловероятно, что происхождение других представлений находится точно в верхнем левом углу текстового контейнера текстового представления! Таким образом, вам нужно преобразовать все эти строки в собственную систему координат текстового контейнера.

(Также имейте в виду, что если текстовое представление прокручиваемое, то все становится еще сложнее, потому что положение других представлений относительно прокручиваемого текстового содержимого будет меняться по мере прокрутки пользователем, поэтому вам придется принять это во внимание. учтите в своих расчетах и ​​снова измените пути исключения.)

Другие вопросы по тегам