缩放 UIPageControl 的当前点并保持其居中

2023-12-10

我对 UIPageControl 进行了子类化,以便使其当前的点更大。

class CustomPageControl: UIPageControl {
    override var currentPage: Int {
        didSet {
            updateDots()
        }
    }

    func updateDots() {
        let currentDot = subviews[currentPage]
        let largeScaling = CGAffineTransform(scaleX: 3, y: 3)

        subviews.forEach {
            // apply the large scale of newly selected dot
            // restore the normal scale of previously selected dot
            $0.transform = $0 == currentDot ? largeScaling : .identity
        }
    }
}

But the result of the transform isn't centered (the red dot should be aligned with the others):
enter image description here

我尝试过(在 iOS 12 上):

  • 改变frame or center of currentDot没有影响。
  • 更改转换以包括translatedBy(x: CGFloat, y: CGFloat)没有影响。
  • 改变约束条件像这儿正在进行第一个点跳跃:

    currentDot.translatesAutoresizingMaskIntoConstraints = false
    currentDot.centerYAnchor.constraint(equalTo: self.centerYAnchor, constant: 0)
    currentDot.centerXAnchor.constraint(equalTo: self.centerXAnchor, constant: 0)
    

    enter image description here


我终于通过重写让它工作了all子视图由我自己限制。

// https://stackoverflow.com/a/55063316/1033581
class DefaultPageControl: UIPageControl {

    override var currentPage: Int {
        didSet {
            updateDots()
        }
    }

    override func sendAction(_ action: Selector, to target: Any?, for event: UIEvent?) {
        super.sendAction(action, to: target, for: event)
        updateDots()
    }

    private func updateDots() {
        let currentDot = subviews[currentPage]
        let largeScaling = CGAffineTransform(scaleX: 3.0, y: 3.0)
        let smallScaling = CGAffineTransform(scaleX: 1.0, y: 1.0)

        subviews.forEach {
            // Apply the large scale of newly selected dot.
            // Restore the small scale of previously selected dot.
            $0.transform = $0 == currentDot ? largeScaling : smallScaling
        }
    }

    override func updateConstraints() {
        super.updateConstraints()
        // We rewrite all the constraints
        rewriteConstraints()
    }

    private func rewriteConstraints() {
        let systemDotSize: CGFloat = 7.0
        let systemDotDistance: CGFloat = 16.0

        let halfCount = CGFloat(subviews.count) / 2
        subviews.enumerated().forEach {
            let dot = $0.element
            dot.translatesAutoresizingMaskIntoConstraints = false
            NSLayoutConstraint.deactivate(dot.constraints)
            NSLayoutConstraint.activate([
                dot.widthAnchor.constraint(equalToConstant: systemDotSize),
                dot.heightAnchor.constraint(equalToConstant: systemDotSize),
                dot.centerYAnchor.constraint(equalTo: centerYAnchor, constant: 0),
                dot.centerXAnchor.constraint(equalTo: centerXAnchor, constant: systemDotDistance * (CGFloat($0.offset) - halfCount))
            ])
        }
    }
}

代码中的系统常量(7.0 和 16.0)分别是 iOS 12 上默认 UIPageControl 点的大小和距离。

result

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

缩放 UIPageControl 的当前点并保持其居中 的相关文章

  • SwiftUI 列表与右侧的部分索引?

    是否可以有一个在右侧有索引的列表 就像下面 SwiftUI 中的示例一样 我在 SwiftUI 中做了这个 Contacts swift TestCalendar Created by Christopher Riner on 9 11 2
  • XMPPFramework - 如何创建多用户聊天室?

    我如何使用XMPPFramework在iPhone中实现GroupChat 我尝试了以下代码 但房间没有创建 我如何知道房间是否创建 XMPPRoomDelegate没有被调用 当Stream断开连接时 调用handleDidLeaveRo
  • ios 用户如何取消 Facebook 登录?

    当用户到达此屏幕时 无法取消 我能做些什么 为了首先获得这个视图 我正在运行 NSMutableDictionary params NSMutableDictionary dictionaryWithObjectsAndKeys vid l
  • 将永久字符添加到 UITextField

    有没有办法将字母永久添加到 UITextField 中 用户无法删除它 我想添加一个字符 用户无法删除它 但他们仍然可以在之后添加字母 Cheers 附注这是适用于 iOS 的 A UITextField有一个名为 应该更改范围内的字符 的
  • 从 UIImagePickerController 相机视图推送 viewController

    我正在开发一款消息应用程序 类似于 WhatsApp 用户可以互相发送文本和图像消息 当用户想要发送图像时 他可以从相机胶卷中选择一张图像 也可以用相机拍摄一张图像 这就是我介绍的方式UIImagePickerController对于这两种
  • Swift Generics 在使用继承时不会实例化泛型

    我有课Alpha and Berry class Alpha class Berry Alpha 我有一个使用继承及其泛型的函数 func myFunc
  • 如何替换已弃用的方法dispatch_get_current_queue()? [复制]

    这个问题在这里已经有答案了 我正在 iOS 5 中使用 xmppframework 开发一个聊天应用程序 它工作得很好 但我将 Xcode 更新到 4 5 1 将 iOS 5 更新到 iOS 6 将 Mac OS 更新到 10 7 5 但由
  • 如何在 SwiftUI 中仅使用 ForEach 而不是列表来滑动删除

    我正在 SwiftUI 中使用 ForEach 制作自定义列表 我的目标是进行滑动删除手势 而不是将 ForEach 嵌入到列表中 到目前为止 这是我的代码 import SwiftUI struct ContentView View le
  • 确定 SceneKit 中 SKVideoNode 的视频大小/长宽比

    如何从 AVPlayer 获取视频的视频大小来设置节点的几何大小 例如 我有一个具有宽度和高度的 SCNPlane let planeGeo SCNPlane width 5 height 5 所以现在我实例化我的视频播放器 let vid
  • Parse.com 从相关 PFObject 获取 PFUser

    我正在将照片保存为 PFObject 解析 并使用 PFUser currentUser 用户 ID 作为其键之一 我想在表格视图中显示照片以及该 PFUser 的详细信息 但是当我尝试获取用户时 PFUser user self phot
  • 如何使用 NSUserDefaults 在 Swift 中存储自定义类的数组?

    我有一个名为的自定义类Person当某人输入信息时 它会存储有关某人的各种属性 class Person Person dictionary variable var name String var age String var html
  • UIScrollView setZoomScale 将应用的旋转设置回零

    我已经从事地图替换工作很长一段时间了 整个事情的工作原理是UIScrollView由一个支持CATiledLayer 为了旋转我的地图 我旋转图层本身 使用CATransform3DMakeRotation 到目前为止效果很好 但如果我打电
  • 是否可以使用 Firebase 安排推送通知? [复制]

    这个问题在这里已经有答案了 我已经阅读了我能找到的所有文档 但仍然不知道这是否可行 如果我是用户 我可以安排特定时间的推送通知吗 Example 1 我是用户并打开应用程序 2 我允许通知并转到 pickerView 或其他任何内容 并设置
  • 如何使用AudioKit保存音频文件?

    我有音频文件 我给它做了一些效果 let pitchshifter AKPitchShifter self audioPlayer pitchshifter shift 10 AudioKit output pitchshifter 如果我
  • 如何使用 Swift 使用 TouchID?

    Apple 为 iOS 8 的 TouchID 实现提供的文档采用 Objective C 语言 有 Swift 版本吗 Objective C IBAction touchIDAvailable UIButton touchIDAvail
  • 推送动画,没有阴影和停电

    我有一个简单的iOS NavigationController基于应用程序 二UICollectionViews 相继 如果元素打开 第一个合集 被点击时 第二集 将被打开 非常简单 重要的提示 Both UICollectionViews
  • 如何让按钮闪烁?

    我试图在扫描正确时将按钮的颜色 只是闪烁 闪烁 更改为绿色 在出现问题时将按钮的颜色更改为红色 我可以用这样的视图来做到这一点 func flashBG UIView animateWithDuration 0 7 animations s
  • 根据 iOS 版本使用不同的类实现?

    iOS 11 最近添加了一个我想使用的新功能 但我仍然需要支持旧版本的 iOS 有没有一种方法可以将同一个类编写两次 并让较新版本的 iOS 使用该类的一个版本 而旧版本的 iOS 使用另一个版本 注 最初我用的是if available
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • UIImageJPEGRepresentation 在视网膜显示屏上提供 2x 图像

    我有这段代码 它创建一个图像 然后向其添加一些效果并缩小其大小以使其largeThumbnail UIImage originalImage UIImage imageWithData self originalImage thumbnai

随机推荐

  • 与 Firebase 实时数据库定价模型相关的混乱

    我计划在一个项目中使用 firebase 在用例场景中 可能会出现 实时数据库 的同时连接数超过 100 免费计划的限制 的情况 有时 一个月内可能有 5 到 6 次 引用他们的定价常见问题解答 如果我超出 Spark 或 Flame 计划
  • Javascript、jQuery同时多个AJAX请求

    function makeCall file handlerFile sendMethod formData console log instance files ajax url handlerFile type sendMethod x
  • 与关键变量具有不同名称的 data.table 进行左外连接

    首先我要说的是 这是我在堆栈溢出上发布的第一个问题 如果我需要更改问题的样式 格式等 请告诉我 我想对两个数据表进行左外连接操作 附加条件是允许两个数据表中的关键变量具有不同的名称 例子 DT1 data table x1 c b c a
  • 如何将子报表的文本字段高度增加为主报表文本字段的高度?

    我想调整子报告的文本字段的大小 在包含到主报告中之前 就像最高主报告的文本字段一样 正如您所看到的 子报表的文本字段的高度不相等 您需要与stretchType 你不能以任何其他方式动态设置高度 不考虑通过java代码 On 报告元素标签你
  • 意外的令牌<反应路由器组件中的错误

    我正在尝试为我的反应应用程序编写路由器组件 我创建新的 React 类并在 componentDidMount 方法中定义一些路由 这是完整的方法 componentDidMount function var me this router
  • HashMap 已经按键排序了?

    我认为HashMap是无序的 当迭代键时 你无法知道顺序是什么 在此示例中 地图似乎已按键编号排序 import java util ArrayList import java util HashMap import java util L
  • 如何在不使用流媒体服务器的情况下实施 Adob​​e HTTP Streaming 规范

    从 Flash 10 1 开始 他们添加了通过appendBytes 方法将字节添加到 NetStream 对象中的功能 此处描述 http www bytearray org p 1689 增加这一功能的主要原因是 Adob e 终于支持
  • 检查当前用户是否是文档的作者

    我有一个 formA 其中有一个字段 author 其类型为作者 计算 用于显示值 Subset Updatedby 1 我在 viewA 上显示 formA 的信息 我想要实现的是 您创建的文档在 viewA 上只有您自己可见 我在 vi
  • 尝试加入频道时出现“错误提案响应 500”错误

    我有以下结构 一个排序者 一个 ca 和一个对等点 定义了通道 1 并且对等方已成功加入该通道 第一个链码已成功部署在对等点上 链码已使用 Composer 编写 导出为 bna 使用连接配置文件 json 在所描述的结构上安装并启动 我试
  • 将新表单添加到 DOM 时,client_side_validations (3.1.0) 不起作用

    我正在使用 Rails 3 1 0rc4 和 client side validations 3 1 0 只要表单在主请求中呈现 一切都会完美运行 但是 如果表单本身通过 JavaScript 添加到页面 则提交表单会导致服务器端验证 我怀
  • Excel 中的模式匹配计数(正则表达式和 VBA)

    我有一个 Office 2007 XLSX文件包含超过 5000 条记录 如下所示 具有多行文本的单个单元格 问题 在相邻的单元格上 输入该单元格中的事件计数 查看 A1 的单元格数据 您可以看到 3 个事件 Cell A1 1 15 20
  • 使用 Styler 对数据框着色后格式化数字

    我在 pandas 中创建了一个 DataFrame 我想使用颜色索引 低值红色 高值绿色 为单元格着色 我成功地做到了这一点 但是颜色阻止我格式化单元格 import pandas as pd df pd DataFrame a 0 5
  • 无法删除 matplotlib.animation.FuncAnimation 对象

    编辑 TL 博士 看起来好像有一个matplotlib backends backend qt4 TimerQT包含对我的 FuncAnimation 对象的引用的对象 如何删除它以释放 FuncAnimation 对象 1 一些背景知识
  • Beautiful Soup Find - 只获取文字

    我有这段代码仅以字符串形式输出价格 125 01 但我必须更改一些内容 因为现在它会打印带有 html 标签和所有内容的整行 我怎样才能让它只打印出文本 而不使用正则表达式 import requests from bs4 import B
  • WP7 GestureListener 上图像宽度/高度的约束

    我添加了GestureListener对于一个图像 我试图像这样的 Stack Overflow 答案进行缩放 如何在WP7中放大和缩小图像 问题是图像永远不会停止缩放 并覆盖页面上的其他控件 这涵盖了页面上的一些重要按钮 此外 它允许图像
  • 找不到 Graphviz 的可执行文件(Python 3.4)

    我在 Windows 7 上运行 Python3 4 我尝试使用 graphviz 的 Python 接口 这是我打算运行的脚本 from graphviz import Digraph import pydotplus dot Digra
  • 通过命令行替换 csv 中的特定文本

    我有 csv 格式的数据 可以从以下位置获取输出SQL Server 数据有一些NULL and N A 写出的值构成列字符类型 否则它只会由整数组成 是否可以通过批处理文件语句查找这些值并将其替换为数字 例如 1NULL和 2 为N A
  • PYSPARK:如何可视化 GraphFrame?

    假设我创建了下图 我的问题是如何可视化它 Create a Vertex DataFrame with unique ID column id v sqlContext createDataFrame a Alice 34 b Bob 36
  • 如何使用 openssl lib pem_read 从字符串读取公钥/私钥

    我在C 中使用openssl 将PrivateKey和PublicKey文件内容复制到两个const char 但我看到api的演示只是从pem文件中获取pem公钥 私钥 那么如何从字符串中获取公钥 私钥呢 尝试这个 char mKey B
  • 缩放 UIPageControl 的当前点并保持其居中

    我对 UIPageControl 进行了子类化 以便使其当前的点更大 class CustomPageControl UIPageControl override var currentPage Int didSet updateDots