Позволить горизонтальную прокрутку только в столбиковой диаграмме базового графика?

(n & (n - 1)) == 0 является лучшим. Однако обратите внимание, что это неправильно возвратит true для n=0, поэтому если это будет возможно, Вы захотите проверить на него явно.

http://www.graphics.stanford.edu/~seander/bithacks.html имеет большое количество умных алгоритмов битового жонглирования, включая этого.

8
задан Peter Hosey 9 February 2010 в 08:41
поделиться

2 ответа

Лишь недавно в графах Core Plot было включено элементарное взаимодействие с пользователем. Чтобы включить прокрутку в любом направлении, вы можете установить для свойства allowedUserInteraction пространства графика значение YES.

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

10
ответ дан 5 December 2019 в 04:28
поделиться

Ограничьте прокрутку, установив делегат (например, CPPlotSpaceDelegate) в пространстве графика и реализуя метод willChangePlotRangeTo. Вы можете одновременно заниматься другими интересными делами. Вот как я ограничиваю отображение одним квадрантом:

- (CPPlotRange *)plotSpace:(CPPlotSpace *)space
    willChangePlotRangeTo:(CPPlotRange *)newRange
            forCoordinate:(CPCoordinate)coordinate {

    // Display only Quadrant I: never let the location go negative.
    //
    if (newRange.locationDouble < 0.0F) {
        newRange.location = CPDecimalFromFloat(0.0);
    }

    // Adjust axis to keep them in view at the left and bottom;
    // adjust scale-labels to match the scroll.
    //
    CPXYAxisSet *axisSet = (CPXYAxisSet *)self.graph.axisSet;
        if (coordinate == CPCoordinateX) {
            axisSet.yAxis.orthogonalCoordinateDecimal = newRange.location;
            axisSet.xAxis.titleLocation = CPDecimalFromFloat(newRange. newRange.locationDouble +
                                                             (newRange.lengthDouble / 2.0F));
        } else {
            axisSet.xAxis.orthogonalCoordinateDecimal = newRange.location;
            axisSet.yAxis.titleLocation = CPDecimalFromFloat(newRange.locationDouble +
                                                             (newRange.lengthDouble / 2.0F));
        }

    return newRange;
}

См .: CPPlotSpace.h

15
ответ дан 5 December 2019 в 04:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: