使用 map()
将一个范围内的值映射到另一个范围。
CGFloat progress = 0.618;
CGFloat viewWidth = CGRectGetWidth([self bounds]);
CGFloat horizontalPosition = map(progress, 0.0, 1.0, 0.0, viewWidth);
[progressIndicator setCenter:CGPointMake(horizontalPosition, 0.0)];
使用 expoMap()
通过在整个目标范围内应用指数曲线,非线性地将一个范围映射到另一个范围。
for (int i = 0; i < 6; i++) {
CGFloat progress = 0.2 * i;
CGFloat exponent = 3.0;
CGFloat mappedProgress = expoMap(progress, 0.0, 1.0, 0.0, 100.0, exponent);
printf("%f, ", mappedProgress);
}
// Prints "0.000000, 4.307549, 12.156414, 26.457980, 52.517134, 100.000000, "
指定正指数可以应用于目标范围的增加指数映射(加速),或指定负指数可以应用于目标范围的衰减指数映射(减速),如下所示。指数为 0 时,将得到线性映射。