首页 iOS.& Swift Books iOS.Apprentice

26
开奖结果3d抛光剂 由Eli Ganim撰写

您的标记位置屏幕现在正常运行,但它看起来有点基本并且可以与一些波兰语有关。这是一个小细节,使您的应用程序能够使用和脱颖而出。

在本章中,您将学习以下内容:

  • 如何通过向您的应用程序开奖结果3d微小调整来提高用户体验,这使其一些波兰语。
  • 如何开奖结果3dhud(Heads. Up Display)到您的应用程序提供快速动画的状态更新。
  • 如何在显示HUD后继续导航流。

提高用户体验

通过描述文本视图查看单元格的设计:

文本视图和单元格边框之间存在余量
文本视图和单元格边框之间存在余量

文本视图和单元格边框之间存在余量。但是,由于单元格和文本视图的背景是白色的,因此用户无法看到文本视图开始或结束的位置。

可以在单元格中挖掘,但在文本视图区域之外。当您想要开始键入时,这很烦人:您认为您在文本视图中窃听,但键盘不会出现。

对用户没有反馈,他们实际上是在文本外部攻击,他们会认为你的应用程序被打破了。在我看来,当之无愧地是如此。

键盘激活细胞

你必须让应用程序更加原谅。当用户在第一个单元格内部的任何位置时,文本视图也应激活,即使点按不在文本视图本身。

// MARK:- Table View Delegates
override func tableView(_ tableView: UITableView,
          willSelectRowAt indexPath: IndexPath) -> IndexPath? {
  if indexPath.section == 0 || indexPath.section == 1 {
    return indexPath
  } else {
    return nil
  }
}

override func tableView(_ tableView: UITableView,
           didSelectRowAt indexPath: IndexPath) {
  if indexPath.section == 0 && indexPath.row == 0 {
    descriptionTextView.becomeFirstResponder()
  }
}

取消激活键盘

如果键盘在屏幕上的其他任何地方消失后,键盘会很好。正如它所发生的那样,实现这不是很难实现的。

// Hide keyboard
let gestureRecognizer = UITapGestureRecognizer(target: self,
                             action: #selector(hideKeyboard))
gestureRecognizer.cancelsTouchesInView = false
tableView.addGestureRecognizer(gestureRecognizer)
. . . target: self, action: #selector(hideKeyboard)) . .
@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()
}
if indexPath == nil ||
          !(indexPath!.section == 0 && indexPath!.row == 0) {
  descriptionTextView.resignFirstResponder()
}
if let indexPath = indexPath {
  if indexPath.section != 0 && indexPath.row != 0 {
    descriptionTextView.resignFirstResponder()
  }
} else {
  descriptionTextView.resignFirstResponder()
}
键盘的“解雇拖动”选项
SCU“QoLzuyy ej jdov”ofhiof ved xco fuppaurb

HUD.

对于这个屏幕来说,还有一个改进,只是为了开奖结果3d一点香料。当你点击 完毕 按钮关闭屏幕,该应用程序将显示一个快速动画,让您知道它成功保存了该位置:

在关闭屏幕之前,它显示动画复选标记
yedaba goe hpasi zru fdnaep iy htucs在avonidub sqojlnewl

创建HUD视图

➤使用该项目将新文件开奖结果3d到项目中 Swift文件 模板。说出它 HUDVIEW..

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
  }
}
let hudView = HudView()
let hudView = HudView.hud(inView: parentView, animated: true)
class func hud(inView view: UIView,
                  animated: Bool) -> HudView {
  let hudView = HudView(frame: view.bounds)
  . . .
  return hudView
}

使用HUD视图

让我们开奖结果3d代码来调用这个时髦的新HUD,以便您可以在操作中看到它。

@IBAction func done() {
  let hudView = HudView.hud(inView: navigationController!.view,
                          animated: true)
  hudView.text = "Tagged"
}
HUD视图涵盖了整个屏幕
npi pim xoer kubuvn gtu kjina vtttuid

let hudView = HudView.hud(inView: view, animated: true)
HUD视图不会覆盖导航栏
Mno Ker veok Maod Kum Xejec Yga Holudixeeem VEV

绘制HUD视图

➤ Remove the backgroundColor line from the hud(inView:animated:) method.

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

  let boxRect = CGRect(
    x: round((bounds.size.width - boxWidth) / 2),
    y: round((bounds.size.height - boxHeight) / 2),
    width: boxWidth,
    height: boxHeight)

  let roundedRect = UIBezierPath(roundedRect: boxRect,
                                cornerRadius: 10)
  UIColor(white: 0.3, alpha: 0.8).setFill()
  roundedRect.fill()
}
let boxWidth: CGFloat = 96
let boxHeight: CGFloat = 96
let boxRect = CGRect(
  x: round((bounds.size.width - boxWidth) / 2),
  y: round((bounds.size.height - boxHeight) / 2),
  width: boxWidth,
  height: boxHeight)
let roundedRect = UIBezierPath(roundedRect: boxRect, cornerRadius: 10)
UIColor(white: 0.3, alpha: 0.8).setFill()
roundedRect.fill()
HUD视图具有部分透明的背景
zbe foy heac wul u wahnaalgl rfungkifocd xijnlmuawd

显示HUD复选标记

➤这本书的资源文件夹有两个文件 HUD图像 文件夹: [email protected][email protected]。将这些文件开奖结果3d到资产目录中, assets.xcassets..

// Draw checkmark
if let image = UIImage(named: "Checkmark") {
  let imagePoint = CGPoint(
    x: center.x - round(image.size.width / 2),
    y: center.y - round(image.size.height / 2) - boxHeight / 8)
  image.draw(at: imagePoint)
}
HUD视图与复选标记图像
cqu gug paib wezg thu breqryukx uriqi

无法初始化者

To create the UIImage, you used if let to unwrap the resulting object. That’s because UIImage(named:) is a 无法 initializer.

显示HUD文本

Usually, to display text in your own view, you’d add a UILabel object as a subview and let UILabel do all of the hard work. However, for a view as simple as this, you can also do your own text drawing.

// Draw the text
let attribs = [
    NSAttributedString.Key.font: UIFont.systemFont(ofSize: 16),
	NSAttributedString.Key.foregroundColor: UIColor.white ]

let textSize = text.size(withAttributes: attribs)

let textPoint = CGPoint(
  x: center.x - round(textSize.width / 2),
  y: center.y - round(textSize.height / 2) + boxHeight / 4)

text.draw(at: textPoint, withAttributes: attribs)
HUD视图与复选标记和文本
QWA Rob Gaap Fikh LSE QDEBSLIZM UDX TBO VARL

开奖结果3d一些动画

之前你已经有点见过动画 - 他们真的很容易开奖结果3d。

// MARK:- Public methods
func show(animated: Bool) {
  if animated {
    // 1
    alpha = 0
    transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
    // 2
    UIView.animate(withDuration: 0.3, animations: {
      // 3
      self.alpha = 1
      self.transform = CGAffineTransform.identity
    })
  }
}
class func hud(inView view: UIView, animated: Bool) -> HudView {
  . . .
  hudView.show(animated: animated)    // Add this
  return hudView
}

改善动画

实际上,你可以做的更好。 iOS的有一种叫做“春天里”的动画,严重的上下跳动,并更加直观有趣比平原旧版本的动画。使用的研究是非常简单的。

UIView.animate(withDuration: 0.3, delay: 0,
     usingSpringWithDamping: 0.7, initialSpringVelocity: 0.5,
                    options: [], animations: {
    self.alpha = 1
    self.transform = CGAffineTransform.identity
  }, completion: nil)

处理导航

回到 LocationDetailsViewController.。用户抽头时仍需要关闭屏幕 完毕.

let delayInSeconds = 0.6
DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds,
                               execute: {
  self.navigationController?.popViewController(animated: true)
})
func hide() {
  superview?.isUserInteractionEnabled = true
  removeFromSuperview()
}
DispatchQueue.main.asyncAfter(deadline: .now() + delayInSeconds,
                               execute: {
  hudView.hide()   // Add this line
  self.navigationController?.popViewController(animated: true)
})

清理代码

GCD代码可能有点杂乱。所以让我们清理代码并更容易理解。

import Foundation

func afterDelay(_ seconds: Double, run: @escaping () -> Void) {
  DispatchQueue.main.asyncAfter(deadline: .now() + seconds,
                                 execute: run)
}
(parameter list) -> return type
@IBAction func done() {
  let hudView = HudView.hud(inView: navigationController!.view,
                                    animated: true)
  hudView.text = "Tagged"
  afterDelay(0.6, run: {
    hudView.hide()
    self.navigationController?.popViewController(animated: true)
  })
}
afterDelay(0.6) {
  hudView.hide()
  self.navigationController?.popViewController(animated: true)
}

有一个技术问题?想报告一个错误吗? 您可以向官方书籍论坛中的书籍作者提出问题和报告错误 这里.

有反馈分享在线阅读体验吗? 如果您有关于UI,UX,突出显示或我们在线阅读器的其他功能的反馈,您可以将其发送到设计团队,其中表格如下所示:

© 2021 Razeware LLC

您可以免费读取,本章的部分显示为 混淆了 文本。解锁这本书,以及我们整个书籍和视频目录,带有Raywenderlich.com的专业订阅。

现在解锁

要突出或记笔记,您需要在订阅中拥有这本书或自行购买。