我用 SwiftUI 做了个「用走路占领地图」的 App,踩了不少坑
起因:我不喜欢看步数
做这个 App 之前,我手机里装过好几款步行类应用,但基本都坚持不了多久。不是不想运动,是那个反馈方式提不起劲——每天盯着"今天走了 6824 步",很难让人有成就感。
我真正喜欢的感觉是「把空白填满」。就像扫雷、拼图、染色格子游戏,那种视觉上区域被逐渐覆盖的爽感,比任何数字都更直观。
于是大概两个月前,我把这个想法做成了一个 iOS App,叫像素征途(PixelGo),现在 App Store 上能搜到。
App 做了什么
核心机制就一句话:走到哪里,地图上对应的像素格就变成你的颜色。
但「像素格亮起来」只是表面,底下的设计逻辑要复杂一些。每个 Tile 有等级、有路线层级(TileRoadTier),还有热力衰减——你昨天走过的路和三周前走过的路,视觉上颜色深浅不一样。我设计了几个衰减时间节点:
enum MapHeatRules {
static let routeGlowSoftDecayDay = 4 // 路线光晕开始变淡
static let routeGlowDecayDay = 7 // 路线光晕基本消退
static let zoneEmphasisDecayDay = 14 // 区域高亮衰退
static let tileResidualDecayDay = 30 // 残留底色消退
static let tileResidualOpacity = 0.12 // 残留透明度
}
这样设计的目的是:地图上最亮的部分就是你最近最活跃的区域,老路线慢慢退成淡色,形成一种类似热力图但更有「游戏感」的视觉效果。有用户评论说看着像打了高光的城市地图,我挺满意这个描述。
连击系统:换一种驱动方式
传统步行 App 的驱动逻辑是目标型——今天要走一万步。我想换成连续探索的倍率奖励:走得越连续,奖励越高,有点像游戏里的 combo 机制。
设计上没搞太复杂:连续 5 天以上双倍积分,3-4 天 1.5 倍,每天有上限(dailyContributionCap = 50)防止刷数据。
早期内测版本没有容错机制,用户一旦断了就直接清零连击,我发现连击达到 5 天以上的用户比例极低。后来加了一个「容错日」(graceDays = 1),断签一天不清零,这个比例明显改善了。
这个观察让我意识到:惩罚机制太硬,用户不会咬牙坚持,而是直接放弃。容错日的决策当时基本靠感觉,后来验证是对的方向。
日历战报:数据可视化的设计取舍
每天的探索记录会聚合成一份「战报」(DailyExplorationDigest),显示今天点亮了多少格、走了多远、主要在哪片区域活动。
其中有个细节我挺满意:活跃强度分四级(0-3),根据当天新点亮的格子数量判定——0 格是 0 级,1-4 格是轻度,5-14 格是中度,15 格以上是重度。这个值直接驱动日历视图里每天色块的深浅,一眼就能看出哪天出门「扫图」了,哪天窝在家里没动。
踩过的几个坑
地图初始化的冷启动问题
用户第一次打开 App,还没授权定位、也没有缓存中心点,地图该显示哪里?如果默认用坐标 (0, 0),地图会落在大西洋中间的「Null Island」,体验非常奇怪。
我按照系统 locale 做了一个区域映射:中国用户默认显示上海陆家嘴,日本显示东京站,美国显示旧金山。逻辑很简单,但第一次打开的感受差很多,这类细节值得花时间处理。
多会话数据聚合的日期坑
用户一天可能分多段记录行程,需要按日期 key 合并成一条 DailyExplorationDigest。我用了 Dictionary 的 default 下标做分组,代码很干净,但有一个容易忽略的细节:DateFormatter 的 dateFormat 必须精确到 yyyy-MM-dd,否则跨时区用户会出现日期归错的问题。这个 bug 排查了挺久,记录一下给有类似场景的朋友参考。
上线之后
目前 App Store 评分 5 分,7 条评价,下载量还很低,基本靠朋友扩散。
用户反馈里有几条值得记录:有人说导入历史照片位置只支持近 3 年太受限(这个限制是我怕数据量大加的,现在看来应该让用户自己选);有人发现探索榜还不能用(这个功能确实没做完就上了,待补);还有人说图标「看着像游戏图标」——这个我自己也知道,设计是弱项,在 TODO 里。
最后想问问大家
做这个 App 的初衷是想验证一件事:把走路的反馈从「走了多少步」换成「占领了哪片区域」,会不会让人更有动力出门。
从我自己用的体验来看,答案是肯定的。上周去买咖啡,特意绕了条平时不走的路,就因为那片区域在地图上还是空白。
如果你也有游戏化设计的经验,想请教一个问题:惩罚机制和容错之间你们怎么取舍?是靠数据跑出来的,还是设计直觉先行?我这个容错日基本靠感觉做的决策,想知道有没有更系统的方法。
App Store 搜「像素征途」或「PixelGo」可以找到,欢迎试用,有问题欢迎评论区交流。

浙公网安备 33010602011771号