Мне известно, что в Интернете есть несколько реализаций календаря Cocoa Touch / iPhone, но по определенным причинам я пытаюсь создать свою собственную. Я сталкиваюсь с проблемой, из-за которой код, который я использую для разметки дат (который я представляю как экземпляры UIView, помещенные в виде подвидов в другой UIView), не работает в декабре.
В настоящее время я разбиваю дату на экземпляр NSDateComponents, затем получаю свойства week
и weekday
компонентов, чтобы определить X и Y "позиции" представления даты соответственно. Я могу сместить позицию X с помощью свойства week
для первого дня месяца, который я выкладываю.
Краткий пример: первый день августа 2009 года приходится на субботу, а свойство week
его компонентов даты равно 31 (с использованием григорианского календаря). Поэтому его позиция Y равна 6, а позиция X равна 0, а смещение X, которое я буду использовать, равно 31. Поэтому я могу взять второй день августа, который является воскресеньем, и определить, что его позиция X равна 0, а его Позиция Y - week
- 31 = 32 - 31 = 1. Таким образом, я могу выложить нулевую индексированную сетку представлений даты за август, и все идет гладко ...
... пока я не попытаюсь сделать то же самое для декабря. В декабре 2009 года, по-видимому, свойство week
становится равным 1 27-го (воскресенье), что означает, что я пытаюсь расположить 27-е по 31-е в позициях Y -48 или около того.
У меня двоякий вопрос: почему свойство week
частично входит в последний месяц года? Индексируется ли это в последнее воскресенье предыдущего года, а не в первый день года? И, во-вторых, есть ли лучший способ выложить сетку дат, подобную этой (используя другие компоненты из экземпляра NSDateComponents или что-либо еще, что я могу получить из NSDate и NSCalendar), или мне просто нужно добавить проверку для условие "последняя неделя года"?