Я работаю с Text Kit в iOS 7 и нахожу много странностей вокруг NSTextContainer
запретных зон.
У меня есть два вида: UITextView
и простой перетаскиваемый UIView
; по мере движения UIView
я создаю путь Безье из фрейма UIView
(с поправкой на координатное пространство UITextView
) и обновляю массив NSTextContainer
exclusionPaths
UITextView
— довольно просто.
На первом снимке экрана видно, что Text Kit красиво оборачивает текст вокруг прямоугольной зоны исключения:
Однако, когда пользователь вводит новые строки в UITextView
, TextKit, кажется, думает, что зона исключения намного больше по вертикали - на то, что кажется точно таким же высоким, как пробел, созданный новой строкой. Путь Безье точно такой же, так что это похоже на проблему с Text Kit (если я не делаю что-то не так).
Код:
ViewController.h:
@interface ViewController : UIViewController<UITextViewDelegate>
@property (nonatomic, strong) IBOutlet UITextView *textView;
@property (nonatomic, strong) IBOutlet UIView *dragView;
@end
ViewController.m:
-(void)viewDidLoad
{
[super viewDidLoad];
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[self.dragView addGestureRecognizer:panRecognizer];
[self updateExclusionZone];
}
-(void)move:(UIPanGestureRecognizer *)pan
{
[self.view bringSubviewToFront:[pan view]];
if ([pan state] == UIGestureRecognizerStateBegan) {
NSLog(@"pan began");
}
self.dragView.center = [pan locationInView:self.view];
[self updateExclusionZone];
if ([pan state] == UIGestureRecognizerStateEnded) {
NSLog(@"pan ended");
}
}
-(void)updateExclusionZone
{
CGRect dragViewFrame = self.dragView.frame;
CGRect exclusionRect = [self.view convertRect:dragViewFrame toView:self.textView];
UIBezierPath *exclusion = [UIBezierPath bezierPathWithRect:exclusionRect];
self.textView.textContainer.exclusionPaths = @[exclusion];
}
есть идеи?