返回

iOS 开发:打造媲美滴滴的预约用车时间选择器

IOS

前言

在当今快节奏的数字时代,便捷可靠的出行服务已成为人们生活中不可或缺的一部分。预约用车作为其中一项核心功能,其时间选择器对于用户体验至关重要。本文将深入探讨如何打造一个媲美滴滴的 iOS 约车时间选择器,为用户提供无缝高效的时间选择体验。

构建时间数据源

预约用车时间选择器的核心在于时间数据源。我们需要构建一个涵盖未来 3 天内所有可选时间的动态数据源。

// 获取当前时间
let currentDate = Date()

// 设定时间范围,从当前时间到 3 天后
let dateRange = Calendar.current.dateInterval(of: .day, for: currentDate, for: DateComponents(day: 3))!

// 创建时间数据源
var timeDataSource: [Date] = []
for day in dateRange {
    // 获取每天的开始时间(00:00)
    let dayStart = Calendar.current.startOfDay(for: day)

    // 生成每 10 分钟的刻度时间,不足 10 分钟向上取整
    var timeInterval = dayStart
    while timeInterval <= dayStart.addingTimeInterval(24 * 60 * 60 - 1) {
        timeDataSource.append(timeInterval)
        timeInterval = timeInterval.addingTimeInterval(10 * 60)
    }
}

自定义分钟刻度

为实现更加细致的时间选择,我们需要自定义分钟刻度。具体做法是将分钟时间刻度单位设定为 10 分钟,并对不足 10 分钟的时间向上取整。

// 自定义分钟时间刻度
let minuteDataSource: [String] = {
    var minutes = [String]()
    for i in 0..<60 {
        let minute = i % 10 == 0 ? String(i) : ""
        minutes.append(minute)
    }
    return minutes
}()

选择当天时间

如果用户选择当天,则需要特殊处理当前小时和分钟数据。

if currentDate.isSameDayAs(selectedDate) {
    // 处理当前小时数据
    let currentHour = Calendar.current.component(.hour, from: currentDate)
    hourDataSource = Array(hourDataSource.dropFirst(currentHour))

    // 处理分钟数据
    let currentMinute = Calendar.current.component(.minute, from: currentDate)
    minuteDataSource = Array(minuteDataSource.dropFirst(currentMinute / 10))
}

当前小时下的分钟数据

在当前小时的情况下,分钟数据需要进一步处理。

if hourDataSource.first == hourDataSource[selectedHourIndex] {
    // 获取当前分钟
    let currentMinute = Calendar.current.component(.minute, from: currentDate)

    // 处理分钟数据
    minuteDataSource = Array(minuteDataSource.dropFirst(currentMinute / 10))
}

打造用户界面

时间选择器的用户界面应直观易用,为用户提供高效无误的时间选择体验。

// 创建时间选择器
let timePicker = UIDatePicker()
timePicker.datePickerMode = .time
timePicker.minuteInterval = 10

// 设置数据源
timePicker.dataSource = self
timePicker.delegate = self

结语

通过构建一个动态时间数据源,自定义分钟刻度,并针对当天和当前小时情况进行特殊处理,我们可以打造一个媲美滴滴的 iOS 预约用车时间选择器。它不仅提供便捷可靠的时间选择,还提升了整体用户体验。希望本文所述方法能为开发者们提供宝贵参考。