相关疑难解决方法(0)

如何在Swift中旋转UIButton和UILabel的文本?

你怎么能为UIButton和旋转文字UILabel?90度,180度.

注意:在将此标记为重复之前,我有意将我的问题建模为此问题的Swift版本:如何在Objective-C中为UIButton和UILabel旋转文本?

rotation uibutton uilabel ios swift

62
推荐指数
3
解决办法
5万
查看次数

获取UIScrollView的屏幕截图,包括屏幕外部分

我有一个UIScrollView实现takeScreenshot方法的decedent,如下所示:

-(void)takeScreenshot {  
  CGRect contextRect  = CGRectMake(0, 0, 768, 1004);
  UIGraphicsBeginImageContext(contextRect.size);    
  [self.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();

  // do something with the viewImage here.
}
Run Code Online (Sandbox Code Playgroud)

这基本上移动到滚动视图的顶部,并截取可见区域的屏幕截图.当iPad面向人像时,它可以正常工作,但当它处于横向时,图像的底部会被切断(因为可见区域的高度仅为748,而不是1004).

是否有可能获得快照UIScrollView,包括不在屏幕上的区域?或者我需要向下滚动视图,拍摄第二张照片并将它们拼接在一起?

iphone core-graphics ipad ios

55
推荐指数
6
解决办法
3万
查看次数

如何在Swift中为iOS创建垂直文本UILabel和UITextView?

如果你根据标题来讨论这个问题,但对蒙古语不感兴趣,你可能会寻找这个问答:


我一直在学习Swift,以便为传统的蒙古语开发iOS应用程序.问题是传统的蒙古语是从上到下,从左到右垂直书写的.我的问题是如何垂直显示文本并仍然有换行功能?

如果你和我待在一起,我会试着更清楚地解释这个问题.下面是我想要实现的文本视图的图像.如果外国脚本将你抛弃,我已经包含了遵循相同模式的英文文本.事实上,如果应用程序有任何英文文本要显示,这应该是它的外观.

在此输入图像描述

对于简单的单线UILabel,顺时针旋转90度就可以了.但是,对于多行UITextView,我需要处理换行.如果我只做一个普通的90度旋转,写的第一件事最终会在最后一行.

到目前为止,我已经制定了一个我认为可以解决这个问题的计划:

  1. 制作一个自定义字体,其中所有字母都垂直镜像.
  2. 顺时针旋转文本视图90度.
  3. 水平镜像文本视图.

在此输入图像描述

这应该照顾文本包装.

我可以做镜像字体.但是,我不知道如何为UITextView的旋转和镜像执行Swift编码.我发现以下链接似乎给解决方案的部分提示,但它们都在Objective C中,而不是在Swift中.

应用程序商店中有传统的蒙古应用程序(像这样这个),但我还没有找到任何人共享他们的源代码,所以我不知道他们在幕后做什么来显示文本.我打算让我的代码开源,以便将来的其他人不会为数百万阅读传统蒙古语的人开发应用程序.你可以给予这项努力的任何帮助,不仅是我,也是蒙古人民.即使你不了解自己,提出这个问题以使其更加明显也会有所帮助.

更新

@ sangonz的答案仍然是一个很好的答案,但我暂时将其标记为已接受的答案,因为我无法让一切顺利.特别:

  • 启用滚动(通过在滚动视图中嵌入自定义视图或通过子类化UIScrollView).在github项目中,@ sangonz说这应该很容易,但它不适合我.
  • 在方向改变时获得字线的重新布局(而不是拉伸).我认为通过更多的研究来解决这个问题应该不会太难.
  • 为什么文本行不会一直到视图的边缘?底部存在很大差距.
  • 如何取消链接自定义垂直视图的NSTextStorage与其他UITextView.(见这个问题)

到目前为止,我一直在使用上面提到的原始方法,但我真正想要的是获得类似@sangonz提议的工作方式.

我现在也在考虑其他方法

uitextview uilabel ios swift mongolian-vertical-script

46
推荐指数
1
解决办法
6142
查看次数

使用Swift中的UITextView属性自定义UIView的加载时间较慢

我最初问过这个问题.我假设自定义视图加载时间缓慢的原因是因为将多个视图叠加在一起或者可能是因为一些递归问题.然而,在删除越来越多的代码以查看会产生什么影响后,可归结为我是否有UITextView礼物.因为我的问题的明显来源与我在第一个问题中所期望的那么不同,所以我决定开始一个新问题,而不是对旧问题添加冗长的更新.

我用两个视图控制器设置我的测试项目.第一个视图控制器上的按钮将show segue调用到第二个视图控制器.第二个视图控制器上有我的自定义视图.(使用第二个视图控制器让我了解加载自定义视图所需的时间.)

自定义视图代码:

import UIKit

@IBDesignable class UIMongolTextView: UIView {

    var textView = UITextView() // key line

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(frame: CGRect){
        super.init(frame: frame)
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,唯一的区别UIView是我添加了一个UITextView属性.而且这种自定义视图加载速度非常慢.在Instruments中运行Allocations工具我得到以下结果(计数为997):

在此输入图像描述

但是,如果我注释掉这条线

    //var textView = UITextView()
Run Code Online (Sandbox Code Playgroud)

然后我自定义视图加载非常快,只有7的计数.

在此输入图像描述

这里发生了什么?是否可以UITextView在自定义视图中使用属性并避免这种缓慢的加载时间?

performance uitextview custom-view ios swift

27
推荐指数
2
解决办法
4149
查看次数

如何通过从Swift中的UIScrollView继承它来创建一个垂直的UITextView?

背景

我是iOS开发的新手,但为了开始使用垂直蒙古语脚本制作最基本的应用程序,我需要有一个垂直UITextView.我没有找到任何其他蒙古应用程序开发人员共享他们的代码所以我试图自己做.蒙古语从上到下书写,线条从左到右换行,如下图所示:

在此输入图像描述

滚动应该是水平的(从左到右).

之前的一个问题中,我提出了镜像字体和旋转和镜像的组合UITextView(因为这是我在Android中所做的).然而,在阅读了这个答案并进一步研究iOS的做事方式(比如使用TextKit)之后,我认为UIVerticalTextView从头开始创建类似的东西可能会更好,而不是搞乱正常情况UITextView.因为我看到UITextView来自UIScrollView的inheirits,我认为我应该继承UIScrollView来制作UIVerticalTextView.

我现在在哪里

我上面提到答案UIView是子类,但我在滚动工作时遇到了很多麻烦.这是我想要子类化的另一个原因UIScrollView.当方向改变时,该解决方案也没有重新布置每行中的单词.

我收集了以下部分,但我不确定如何将它们组合在一起:

  • NSTextStorage - 这应该没有什么不同.它只存储蒙古语Unicode文本和任何样式信息.
  • NSTextContainer - 需要切换高度和宽度以提供垂直文本容器大小.(我想是的,无论如何.除非这可以在其他地方完成.)
  • NSLayoutManager - 有什么特别需要在这里完成或是由UIVerticalTextView?照顾?
  • UIVerticalTextView - 这将是一个子类,UIScrollView但需要添加和/或覆盖的方法是什么?

    class UIVerticalTextView: UIScrollView {
    
        // Which properties to include?
        //     - TextStorage
        //     - TextContainer
        //     - LayoutManager
    
        // which methods to override?
    
        // which methods to add to …
    Run Code Online (Sandbox Code Playgroud)

uiscrollview uitextview ios swift mongolian-vertical-script

17
推荐指数
1
解决办法
988
查看次数

调整大小后,UITextView的内容会被多余的空间放错位置

背景和问题的描述

我制作了一个垂直文本视图,用于蒙古语.它是一个自定义文本视图,由三层视图组成:子UITextView视图,容器视图(旋转90度并翻转)以保存UITextView和父视图.(有关更多背景信息,请参阅此处此处.)

只要介于最小和最大大小之间,视图就会根据基础文本视图的内容大小增加其大小.但是,在过去的几天里,我一直在努力修复一个错误,即添加了一个额外的空间并且内容向左移动(这将在底层文本视图的坐标上).这可以在下图中观察到.黄色视图是自定义文本视图(inputWindow在下面的视图控制器代码中调用.)

在此输入图像描述

点击输入几次以增加内容视图的大小后,会添加一个额外的空格.试图滚动视图什么也没做.(在宽度达到最大值并且内容大小大于帧大小之后滚动会起作用.)就好像内容在它被放置到正确位置之前被冻结到位时处于滚动的中间位置.如果我插入另一个字符(如空格),则内容视图会将其自身更新到正确的位置.

我需要改变什么?或者,如何手动强制底层UITextView显示其内容视图在正确的位置?

我试图删除所有无关的代码,只留下View Controller和Custom Vertical TextView的相关部分.如果还有其他我应该包括的内容,请告诉我.

查看控制器

视图控制器在内容视图大小更改时更新自定义文本视图的大小约束.

import UIKit
class TempViewController: UIViewController, KeyboardDelegate {

    let minimumInputWindowSize = CGSize(width: 80, height: 150)
    let inputWindowSizeIncrement: CGFloat = 50

    // MARK:- Outlets
    @IBOutlet weak var inputWindow: UIVerticalTextView!
    @IBOutlet weak var topContainerView: UIView!
    @IBOutlet weak var keyboardContainer: KeyboardController!
    @IBOutlet weak var inputWindowHeightConstraint: NSLayoutConstraint!
    @IBOutlet weak var inputWindowWidthConstraint: NSLayoutConstraint!


    override func viewDidLoad() {
        super.viewDidLoad()

        // get rid …
Run Code Online (Sandbox Code Playgroud)

uitextview ios swift mongolian-vertical-script

11
推荐指数
1
解决办法
688
查看次数

旋转的视图是否与自动布局兼容?

我学会了如何使用仿射变换旋转视图(参见此处).我还了解了自动布局(参见此处此处),甚至是程序化的自动布局(参见此处此处).但是,我不知道如何让自动布局与旋转视图一起使用.

此图显示了我想要做的事情:

在此输入图像描述

我认为问题来自宽度和高度因旋转而变化.有没有办法让旋转视图填充它的超视图?是否有一些技巧可以使自动布局工作或旋转后它是不兼容的?

(我只学过Swift,但如果你更熟悉的话,我会很高兴通过Objective-C答案.)

更新

按照@ VinayJain的建议,我做了以下事情:

  • 将子视图边缘固定到故事板中的superview.
  • 为子视图的所有边上的间距约束创建了IBOutlets.

    @IBOutlet weak var rightSpace: NSLayoutConstraint!
    @IBOutlet weak var leftSpace: NSLayoutConstraint!
    @IBOutlet weak var topSpace: NSLayoutConstraint!
    @IBOutlet weak var bottomSpace: NSLayoutConstraint!
    
    Run Code Online (Sandbox Code Playgroud)
  • 旋转子视图

    subview.transform = CGAffineTransformMakeRotation(CGFloat(M_PI_2))
    
    Run Code Online (Sandbox Code Playgroud)
  • 改变了网点的限制

    self.rightSpace.constant = CGFloat(0)
    self.leftSpace.constant = CGFloat(0)
    self.topSpace.constant = CGFloat(0)
    self.bottomSpace.constant = CGFloat(0)
    
    Run Code Online (Sandbox Code Playgroud)

但就在这一点上,我意识到我并不需要改变间距值.我希望间距保持为0.我只需要它来调整自己.然而,旋转混乱了.效果如下图所示:

在此输入图像描述

rotation ios autolayout

10
推荐指数
1
解决办法
1967
查看次数

如何在自定义视图中嵌入 UITableView

目标

我想创建一个自定义视图,它有一个 UITableView 作为子视图。

在此处输入图片说明

自定义视图以编程方式创建表视图。但是,对于外部世界(即 ViewController),自定义视图本身似乎是一个表视图。

我试过的

import UIKit
class CustomTableView: UIView {
    
    // Do I make outlets?
    //@IBOutlet var dataSource: UITableViewDataSource?
    //@IBOutlet var delegate: UITableViewDelegate?
    
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    
    override init(frame: CGRect){
        super.init(frame: frame)
    }
    
    override func awakeFromNib() {
        super.awakeFromNib()
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        var tableView: UITableView!
        tableView = UITableView(frame: self.bounds)
        // I'm not sure how to set the delegate and dataSource
        // tableView.dataSource = ???
        // tableView.delegate = ???
        
        self.addSubview(tableView)
       
    }
} …
Run Code Online (Sandbox Code Playgroud)

uitableview custom-component ios swift

6
推荐指数
1
解决办法
4288
查看次数