Можно ли добавить несколько тактильных ощущений для воспроизведения друг за другом в Swift?

Я пытался добавить несколько тактильных событий в зависимости от того, когда каждое представление, в котором у меня есть анимация, однако при тестировании он воспроизводит только первое тактильное и останавливается на нем. Я пытался искать в Интернете, возможно ли вообще воспроизвести несколько тактильных ощущений за короткий промежуток времени (будет ли Taptic Engine готов срабатывать несколько раз так быстро?), но ничего не смог найти.

Кто-нибудь знает, возможно ли это, и если да, то почему мой может не работать?

Я пробовал 2 разных метода добавления нескольких тактильных ощущений:

Вот мой код для первого метода, где я сначала инициализирую новый экземпляр, а затем воспроизводю один и тот же тактильный эффект в каждом блоке анимации с задержкой 0,25 между анимациями:

      func animateSunriseAndSunsetViews() {
    let generator = UIImpactFeedbackGenerator(style: .medium)
    generator.prepare() //prepares Taptic Engine for use
    
    sunriseView.alpha = 0
    morningGoldenHourView.alpha = 0
    morningWeatherLabel.alpha = 0
    morningGoldenHourWeatherView.alpha = 0
    eveningGoldenHourView.alpha = 0
    sunsetView.alpha = 0
    eveningWeatherLabel.alpha = 0
    eveningGoldenHourWeatherView.alpha = 0
    nextGoldenHourLabel.alpha = 0
    
    UIView.animate(withDuration: 1, delay: 0, options: .curveEaseInOut) {
        self.sunriseView.alpha = 100
        generator.impactOccurred() //plays haptic here
    }
    UIView.animate(withDuration: 1, delay: 0.25, options: .curveEaseInOut) {
        self.morningGoldenHourView.alpha = 100
        generator.impactOccurred() //plays haptic here
    }
    UIView.animate(withDuration: 1, delay: 0.5, options: .curveEaseInOut) {
        self.eveningGoldenHourView.alpha = 100
        generator.impactOccurred()
    }
    UIView.animate(withDuration: 1, delay: 0.75, options: .curveEaseInOut) {
        self.sunsetView.alpha = 100
        generator.impactOccurred() //plays haptic here
    }
    UIView.animate(withDuration: 1, delay: 1, options: .curveEaseInOut) {
        self.morningWeatherLabel.alpha = 100
        generator.impactOccurred() //plays haptic here
    }
    UIView.animate(withDuration: 1, delay: 1.25, options: .curveEaseInOut) {
        self.morningGoldenHourWeatherView.alpha = 100
        generator.impactOccurred() //plays haptic here
    }
    UIView.animate(withDuration: 1, delay: 1.5, options: .curveEaseInOut) {
        self.eveningWeatherLabel.alpha = 100
        generator.impactOccurred() //plays haptic here
    }
    UIView.animate(withDuration: 1, delay: 1.75, options: .curveEaseInOut) {
        self.eveningGoldenHourWeatherView.alpha = 100
        generator.impactOccurred() //plays haptic here
    }
    UIView.animate(withDuration: 1, delay: 2, options: .curveEaseInOut) {
        self.nextGoldenHourLabel.alpha = 100
        generator.impactOccurred() //plays haptic here
    }
}

Вот второй метод, который я пробовал, когда я инициализирую и проигрываю новый тактильный эффект в каждом блоке анимации:

      func animateSunsetViews() {
    
    eveningGoldenHourView.alpha = 0
    sunsetView.alpha = 0
    eveningWeatherLabel.alpha = 0
    eveningGoldenHourWeatherView.alpha = 0
    nextGoldenHourLabel.alpha = 0
    
    UIView.animate(withDuration: 1, delay: 0, options: .curveEaseInOut) {
        self.eveningGoldenHourView.alpha = 100
        
        let generator = UINotificationFeedbackGenerator()
        generator.notificationOccurred(.success) //plays haptic here
    }
    UIView.animate(withDuration: 1, delay: 0.25, options: .curveEaseInOut) {
        self.sunsetView.alpha = 100
        
        let generator = UINotificationFeedbackGenerator()
        generator.notificationOccurred(.success) //plays haptic here
    }
    UIView.animate(withDuration: 1, delay: 0.5, options: .curveEaseInOut) {
        self.eveningWeatherLabel.alpha = 100
        
        let generator = UINotificationFeedbackGenerator()
        generator.notificationOccurred(.success) //plays haptic here
    }
    UIView.animate(withDuration: 1, delay: 0.75, options: .curveEaseInOut) {
        self.eveningGoldenHourWeatherView.alpha = 100
        
        let generator = UINotificationFeedbackGenerator()
        generator.notificationOccurred(.success) //plays haptic here
    }
    UIView.animate(withDuration: 1, delay: 1, options: .curveEaseInOut) {
        self.nextGoldenHourLabel.alpha = 100
        
        let generator = UINotificationFeedbackGenerator()
        generator.notificationOccurred(.success) //plays haptic here
    }
}

Пока что оба метода воспроизводят только первый тактильный сигнал и на этом останавливаются. Любые идеи, если это работает? Спасибо.

0 ответов

Другие вопросы по тегам