Алгоритм настройки непрозрачности по дате - PullRequest
1 голос
/ 20 ноября 2011

Мой клиент попросил меня установить непрозрачность (альфа) для различных различных меток MKPlacemarks в зависимости от того, какой была дата.

Для самой старой половины меток места он хотел бы, чтобы непрозрачность была установлена ​​на0.5.

Я могу сделать это, разработав индекс метки места и проверив, находится ли он в последней половине массива.

int indexOfPlacemark = [fixes indexOfObject:fix]; //fixes is the array of Placemarks (named fix).

if (index <= [fixes count] / 2) {
    [annotationView setAlpha:0.5];
} else {
    // do something with fix.date to work out the opacity.
    // an example of the date is Sun, May 15, 2011 - 12:00:44
}

Но тогда он хочет, чтобы яповысить непрозрачность для каждого другого знака места в зависимости от его даты.Т.е. самая последняя дата будет иметь непрозрачность 1,0, а самая старая дата в первой половине массива будет ~ 0,5.

Что я хотел бы знать, так это то, как я могу определить непрозрачность в зависимости от еедата.

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

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

попробуйте этот метод

newval = (((oldval - oldestdate) / (newestdate - oldestdate)) * (0.5)) + 0.5
0 голосов
/ 20 ноября 2011

Просто найдите «самую старую половину» массива, посчитайте элементы, затем линейно масштабируйте от 0,5 до 1,0 с шагом 0.5 / count.Например, если у вас есть пять элементов в самой старой половине, то ваш прирост будет 0.5 / 5 = 0.1, и поэтому вы дадите непрозрачность 0,5, 0,6, ..., 0,9.

Это зависит от того, сможете ли вылегко найти «самую старую половину», а также отсортированный массив этой половины (чтобы вы могли назначать непрозрачности последовательно).

...