2016-04-26 2 views
10

Я создаю приложение для iPad Pro, у которого есть UITableView, показывающий каталог с элементами. Есть много каталогов, каждый из которых содержит 1 тысячу предметов.Аннотируйте табличный вид на iPad Pro с карандашом

Гол

Я хотел бы узнать, как (лучше) позволяют аннотировать материал в UITableView с помощью карандаша, так что пользователь может прокручивать пальцем. Кроме того, то, что нарисовал пользователь, сохраняется в модели данных.

Позвольте мне объяснить, что я пробовал.

Single UIView

Я поставил один UIView на вершине пользовательского UITableView, который переопределяет touchesBegan/Moved/Ended/Canceled функций и фильтров на touch.type == UITouchType.Stylus, чтобы знать, когда это палец, и когда это карандаш. Это работает, но это нехорошее решение, так как изображение будет огромным и даже не возможно поставить для некоторых каталогов слишком много элементов.

Per подряд через UIView

хорошо работает с большой каталог, но проблема придумали не в состоянии нарисовать по строкам, которые должны быть возможно. Я еще не нашел способ сохранить жест в разных взглядах. Возможно ли это или есть какое-то обходное решение?

Fixed UIView на экране

Следит при прокрутке, легко сделать через что-либо, но неясно, и трудно исправить обращается материал в таблице координат, а также сохраняются его. Он не чувствовал себя так, как казалось слишком сложным, чтобы, возможно, иметь холст размером с экран, и все, что нарисовано, преобразуется в UIImageView для строк, которые он охватывает и сохраняется там ... вот где я сейчас, и я могу показать некоторый код, если этот подход имеет смысл.

Есть ли лучший подход к этому, так как мне кажется, что теперь это очень естественная потребность с карандашом, т. Е. Аннотировать и сохраняться в виде таблицы.

Кто-нибудь сделал что-то подобное или есть что-то, что я упустил? Может быть, какой-то разреженный UIImageView, чтобы у меня был сингл через массивный стол?

Я ищу хорошее решение и пример кода в зависимости от того, как это связано с решением.

Спасибо!

UPDATE

Так уточнить, что элементы в таблице упорядочены в определенном пути, таким образом можно использовать, чтобы упорствовать нарисованные/аннотированные вещи, как обертоны.

Как правило, чертежи/аннотации могут сохраняться как от 1 до N изображений. Одно изображение во многих случаях слишком велико, так как элементы много тысяч, N изображений означает, что есть граница, где жест прерывается, и это не идеально подходит для удобства использования, поскольку рисунок не является непрерывным (если это невозможно решить, будь велика).

Модель данных может быть каталогом [-> pages] ->, но мне не хотелось бы иметь концепцию страницы, поскольку она (более короткая причина) уменьшает количество элементов на странице, и цель состоит в том, чтобы максимизировать элементы к нему проще комментировать.

+0

Является ли аннотация привязана к одному элементу в виде таблицы? Если порядок элементов в представлении таблицы меняется, аннотации следуют новому порядку? –

+0

Да, очень хороший вопрос. Это, конечно, все связано с этим конкретным случаем, и порядок фиксирован и не изменится. Аннотации не обязательно должны быть связаны с определенной строкой/элементом, но может быть, если это помогает сохранить (маленькие изображения по сравнению с большими изображениями?) – murrekatt

+0

Но, конечно, аннотации связаны с элементами/строками. То есть вы отмечаете что-то или комментируете что-то для этой конкретной строки/элемента. Кроме того, вы можете захотеть пометить/аннотировать ряд элементов, поэтому рисунок/аннотация должна охватывать несколько строк/элементов. – murrekatt

ответ

0

ОК, поэтому никто, похоже, не сделал этого.

У меня есть работающий теперь с каждой строкой холст, который также сохраняется как изображение. Основная проблема заключалась в том, что рисование было непрерывным и непрерывным в строках таблицы.

То, как я сделал это было использовать hitTest в моей пользовательской таблице с классом, чтобы поймать штрихи:

override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? 
{ 
    if let result = super.hitTest(point, withEvent: event) { 
     if let sv = result.superview { 
      if sv.isKindOfClass(TableHeaderView) { 
       return result 
      } 
     } 
     return self 
    } 
    return nil 
} 

..., а затем в touches* функции отключить/включить прокрутку, если это карандаш, а затем делегировать соответствующую ячейку для рисования и сохранения.

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) 
{ 
    if let touch = touches.first { 
     if touch.type == UITouchType.Stylus { 
      scrollEnabled = false 

      let location = touch.locationInView(self) 
      // find underlying cell -> call drawTouches 
      for visibleCell in visibleCells { 
       if let cell = visibleCell { 
        if CGRectContainsPoint(cell.frame, location) { 
         cell.touchesBegan(touches, withEvent: event) 
         break 
        } 
       } 
      } 
     } 
    } 
} 

Основная идея состоит в том, чтобы иметь общий контроль в виде таблицы, чтобы поддерживать непрерывный жест. Другим способом добиться этого было бы с единственным фиксированным экраном с холстом и делегировать его в ячейки таблицы. Вещь, о которой нужно заботиться, - это прокрутка в моем случае, позволяющая прокручивать палец и рисовать карандашом. UIScrollView, что UITableView происходит от жесты уловов, поэтому не нужно задерживать жесты в классе представления таблицы.

delaysContentTouches = false 

Работает очень хорошо, но не уверен, что есть более хороший способ, пожалуйста, прокомментируйте.

0

Я думаю, что я буду заниматься этим следующим образом.

[draw layer] 
[annotation layer] 
[table view] 

Три слоя, с видом на стол внизу. Верхний слой фиксирован и используется для рисования. Как только будет выделена аннотация, он будет перемещен на слой аннотации, который также будет исправлен.

Когда рисунок перемещаются в аннотаций слой он должен быть переведен в Tableview слои системы (содержание смещения в виде таблицы + смещение в дро-слое)

координат Как только TableView прокручиваются аннотация слоев координат система переводится с CGAffineTransform, которая перемещает все подслои, чтобы аннотации «прокручивались» с помощью таблицы. Чтобы уточнить, система координат слоев аннотаций должна всегда синхронизироваться со смещением содержимого таблицы.

+0

Спасибо, но это не относится ко всему, что я объяснил, мне нужно. – murrekatt

Смежные вопросы