2011-11-19 53 views
1

我的客户要求我根据日期设置不同的MKPlacemarks的不透明度(alpha)。根据日期设置不透明度的算法

对于最早的一半地点标记,他希望不透明度设置为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

如果我们将日期作为一个长整型值,那么最早的日期和最新的日期形成一个间隔,这个间隔可以重新调整和移动。

试试这个方法

newval = (((oldval - oldestdate)/(newestdate - oldestdate)) * (0.5)) + 0.5 
0

只需找到该阵列的“最老的一半”,对这些项目进行计数,然后以0.5/count为增量从0.5线性缩放到1.0。例如,如果您在最早的一半中有五个项目,那么您的增量将为0.5/5 = 0.1,因此您给出不透明度0.5,0.6,...,0.9。

这取决于你能够很容易地找到“最老的一半”,以及你有一个排序数组的一半(所以你可以分配不透明度顺序)。