Расчет движения шарика
Обратите внимание на то, что одно из свойств объявляется как gsynthesize, хотя мы и реализовали в приведенном нами в прошлой статье коде, модифицирующий метод для этого свойства. Но в этом нет никакого противоречия, поскольку директива synthesize не заменяет написанные методы доступа или модификации, а только заполняет пустые места и предоставляет то, чего они не обеспечивают.
Мы оперируем свойством currentPoint вручную. Ведь когда это свойство изменяется, нам нужно принять некоторые организационные меры, в том числе убедиться в том, что шарик не выкатился за пределы экрана. Соответствующий метод, в котором это делается, будет рассмотрен ниже, а до тех пор проанализируем первый метод в классе BallView — initWithCoder. Напомним, что когда представление загружается из nib-файла, методы init или initwithFrame данного класса вообще не вызываются. В nib-файлах содержатся архивированные объекты, и поэтому любые их экземпляры, загружаемые из nib-файла, будут инициализированы методом initWithCoder:. Если же нам требуется любая дополнительная инициализация, мы должны выполнить ее именно в этом методе.
В этом представлении мы осуществляем дополнительную инициализацию, для чего переопределили метод initWithCoder. Во-первых, мы загружаем файл изображения ball, png. А во-вторых, рассчитываем середину представления и задаем ее в качестве отправной точки для шарика, а также устанавливаем в нуль скорость движения по обеим осям координат.
Метод drawRect вряд ли можно сделать еще проще. В нем мы просто рисуем изображение, загружаемое в методе initWithCoderв положении, хранящемся в переменной current Point. Метод доступа к переменной current Point является стандартным, но совсем другое дело — модифицирующий метод setCurrentPoint.
В методе setCurrentPoint мы сначала сохраняем в переменной previousPoint прежнее значение переменной currentPoint и присваиваем последней новое значение.
После этого рассчитываем прямоугольные объекты типа CGRect, исходя из размеров изображения. Один из прямоугольников охватывает участок, на котором будет нарисовано новое изображение, а другой — участок, на котором прежнее изображение было нарисовано в последний раз.
- Дата: 29-01-2015, 11:46