iOS HUD (Heads Up Display) 旋转框

本文介绍了如何在iOS应用中实现隐藏软键盘和使用头部显示单元(HUD)视图。通过在`viewDidLoad()`中添加手势识别器,可以实现在点击tableview非section0,row0之外的区域时隐藏键盘。同时,展示了创建和使用自定义的HUD视图,包括显示、动画和关闭方法。此外,文章还讨论了如何在导航控制器返回时优雅地隐藏HUD,以及如何使用GCD处理异步任务,确保用户体验的连贯性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、隐藏软键盘

在 viewDidLoad() 添加 gestureRecognizer

// Hide keyboard
let gestureRecognizer = UITapGestureRecognizer(
  target: self, 
  action: #selector(hideKeyboard))
gestureRecognizer.cancelsTouchesInView = false
tableView.addGestureRecognizer(gestureRecognizer)
@objc func hideKeyboard(
  _ gestureRecognizer: UIGestureRecognizer
) {
  let point = gestureRecognizer.location(in: tableView)
  let indexPath = tableView.indexPathForRow(at: point)

  if indexPath != nil && indexPath!.section == 0 && 
  indexPath!.row == 0 {
    return
  }
  descriptionTextView.resignFirstResponder()
}

以上代码确保只有点击 section 0, row 0 之外部分才会隐藏软键盘。

The HUD (Heads Up Display)

HUD,是 Heads-Up Display 的缩写。HUD 通常用于像下载文件或执行其它长期任务时显示进度条。

HUD 是 UIView 的子类,我们可以在其它视图之上添加 HUD。实际上,labels 是添加在 cells 顶部的 view,cells 是被添加到 table view 顶部的 view,而 table view 又是被添加在 navigation controller 的顶部的内容视图。

创建 HUD view

HudView.swift:

import UIKit

class HudView: UIView {
  var text = ""

  class func hud(
    inView view: UIView, 
    animated: Bool
  ) -> HudView {
    let hudView = HudView(frame: view.bounds)
    hudView.isOpaque = false

    view.addSubview(hudView)
    view.isUserInteractionEnabled = false

    hudView.backgroundColor = UIColor(
      red: 1, 
      green: 0, 
      blue: 0, 
      alpha: 0.5)
    return hudView
  }

   override func draw(_ rect: CGRect) {
      let boxWidth: CGFloat = 96
      let boxHeight: CGFloat = 96

      let boxRect = CGRect(
        x: round((bounds.si
XNProgressHUD (https://github.com/LuohanCC/XNProgressHUD) 一款支持支持自定义的轻量级HUD,支持垂直、水平两种样式。SVProgressHUD非常灵活,所见的部分都可根据自己的要求进行自定义,包括自义动画效果或图片,只需要实现相关协议方法。 安装使用 pod 'XNProgressHUD' 使用说明 在Window上显示: [XNHUD showLoadingWithTitle:@"正在登录"]; [XNHUD showWithTitle:@"这是一个支持自定义的轻量级HUD"]; [XNHUD showInfoWithTitle:@"邮箱地址不能为空"]; [XNHUD showErrorWithTitle:@"拒绝访问"]; [XNHUD showSuccessWithTitle:@"操作成功"]; 在ViewController上显示(maskType.enable=true时,导航栏依然可以接受点击事件) // 引入'UIViewController XNProgressHUD.h' [self.hud showLoadingWithTitle:@"正在登录"]; [self.hud showWithTitle:@"这是一个支持自定义的轻量级HUD"]; [self.hud showInfoWithTitle:@"邮箱地址不能为空"]; [self.hud showErrorWithTitle:@"拒绝访问"]; [self.hud showSuccessWithTitle:@"操作成功"]; // 设置显示位置 [XNHUD setPosition:CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height * 0.7)]; // 设置主色调 [XNHUD setTintColor:[UIColor colorWithRed:38/255.0 green:50/255.0 blue:56/255.0 alpha:0.8]]; // 设置相应的maskType转态下的颜色(16进制颜色值) [XNHUD setMaskType:(XNProgressHUDMaskTypeBlack) hexColor:0x00000044]; [XNHUD setMaskType:(XNProgressHUDMaskTypeCustom) hexColor:0xff000044]; 属性和方法说明 显示时长minimumDelayDismissDuration作用于非加载样式的视图:XNRefreshViewStyleInfoImage、XNRefreshViewStyleError、XNRefreshViewStyleSuccess; 显示时长maximumDelayDismissDuration作用与加载样式的视图:XNRefreshViewStyleLoading、XNRefreshViewStyleProgress。 @property (nonatomic, assign) NSTimeInterval minimumDelayDismissDuration; //default:1.5f @property (nonatomic, assign) NSTimeInterval maximumDelayDismissDuration; //default:20.f 延时显示时间和延时消失时间,该方法只对下一次HUD显示生效(只生效一次)。 [XNHUD setDisposableDelayResponse:1.0f delayDismiss:2.0f]; 设置排列方向,默认为水平方向 [XNHUD setOrientation:XNProgressHUDOrientationHorizontal]; 自定义XNProgressHUD 如果需要自定义加载视图的显示内容和动画样式,请重写XNRefreshView并实现XNRefreshViewProtocol中的协议方法即可,具体如下 1.自定义XNRefreshView并实现XNRefreshViewProtocol中的协议方法; 2.继承XNProgressHUD实现XNProgressHUDMethod中的协议方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值