Я новичок в разработке IOS и в настоящее время имею приложение с кнопкой, которая создает новые экземпляры перетаскиваемого класса UIView, который я создал. Я хочу сделать так, что есть UIBezierPaths, соединяющие каждый экземпляр UIView. Я хочу, чтобы связанные строки UIBezierPath следуют, когда я перетаскиваю экземпляры UIView на экране. Как/Где я могу поместить код UIBezierPath чертежа, чтобы получить этот эффект?UIBezierPath между перетаскиваемыми видами
0
A
ответ
2
Я сделал проект некоторое время назад, что делает что-то похожее на то, что вы хотите. Код для рисования строк в drawRect:
, и я использую наблюдателя свойств для перерисовки строк при перетаскивании представления. Это приложение помещает 10 кругов (экземпляры NodeView) в случайные позиции на экране и добавляет строки от одного к другому. Вот код, который находится в пользовательском классе UIView, который я использую в качестве self.view контроллера,
@implementation RDView
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
_nodes = [NSMutableArray new];
for (int i = 0; i<10; i++) {
NodeView *aNode = [NodeView new];
CGFloat hue = arc4random_uniform(1000)/1000.0;
aNode.backgroundColor = [UIColor colorWithHue:hue saturation:1 brightness:1 alpha:.7];
CGFloat xVal = arc4random_uniform(300);
CGFloat yVal = arc4random_uniform(400) + 50;
aNode.frame = CGRectMake(xVal, yVal, 20, 20);
[self addSubview:aNode];
UIPanGestureRecognizer *panner = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[aNode addGestureRecognizer:panner];
[_nodes addObject:aNode];
}
}
return self;
}
-(void)awakeFromNib {
for (NodeView *aNode in self.nodes) {
[aNode addObserver:self forKeyPath:@"center" options:NSKeyValueObservingOptionNew context:nil];
}
}
-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"center"]) [self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:[self.nodes[0] center]];
for (int i = 1; i<self.nodes.count; i++) {
CGFloat dashes[] = {0, path.lineWidth * 2};
[path setLineDash:dashes count:2 phase:0];
path.lineCapStyle = kCGLineCapRound;
[path addLineToPoint:[self.nodes[i] center]];
}
[path closePath];
[path stroke];
}
- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:self];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:self];
}
Вы можете найти проект здесь, http://jmp.sh/68SdS4f
Смежные вопросы
- 1. Перемещение между видами деятельности и освежающими видами
- 2. Передача информации между видами
- 3. ST2 навигация между видами
- 4. Передача поплавков между видами
- 5. Прокрутка между видами
- 6. Переключение между видами
- 7. NSNotification между видами сестры
- 8. Ценности между видами
- 9. IOS Переключение между видами
- 10. Передача изображения между видами
- 11. Передача данных между видами?
- 12. Перемещение между видами деятельности
- 13. обработка между видами событий
- 14. Обмен данными между видами
- 15. Переключение между видами деятельности
- 16. Autolayout - Заполнение между видами
- 17. Передача данных между видами
- 18. Магистральные переходы между видами
- 19. переключение между видами
- 20. NSUserDefaults протирают между видами
- 21. Навигация между видами
- 22. отправка NSNotification между видами
- 23. Переключение между тремя видами
- 24. Xcode: Переключение между видами
- 25. отправки строки между видами
- 26. Проведите между видами
- 27. Отображение изображения между видами
- 28. iOS: переход между видами
- 29. Передача переменных между видами
- 30. Обмен контроллером между видами
Это именно то, что я пытался реализовать. Огромное спасибо. – Girthworm