请不要立即诋毁这个副本,我已经在stackoverflow上工作了2天,现在尝试任何方式来做这个,阅读了很多博客文章(可能有点过时)但仍然没有运气。
基本上,我有一个自定义的UIView,用于绘制很多圆圈(它只是起点),我无法在初始加载时向下滚动到除可见圆圈之外的视图。我为其中的大约200个做了for循环,以确保有一些东西可以滚动到。
这是我的观看代码:
import UIKit
class Draw2D: UIView {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder);
}
override func drawRect(rect: CGRect) {
let context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
let colorSpace = CGColorSpaceCreateDeviceRGB();
let components: [CGFloat] = [0.0, 0.0, 1.0, 1.0];
let color = CGColorCreate(colorSpace, components);
CGContextSetStrokeColorWithColor(context, color);
var ctr = 0;
var ctr2 = 0;
for(var i:Int = 1; i<200; i++){
var ii: CGFloat=CGFloat(10+ctr);
var iii: CGFloat = CGFloat(30+ctr2);
CGContextStrokeEllipseInRect(context, CGRectMake(ii, iii, 33, 33));
if(ctr<200)
{
ctr+=160;
}else{
ctr=0;
ctr2+=50;
}
}
CGContextStrokePath(context);
}
}
在界面构建器中,我将视图类设置为Draw2D,将控制器设置为我的自定义ViewController类。视图控制器类目前是标准的,没有添加其他选项。
我尝试在屏幕上拖动滚动视图,我尝试删除标准视图,添加滚动视图,然后将我的Draw2D视图放在其上,它不起作用。我尝试更改滚动视图的大小,使其小于我的内容(draw2d)视图,什么也没有。我尝试取消选中自动布局,并根据我在网上找到的某些教程将模拟大小更改为自由格式。
我也曾尝试在UIView中以编程方式创建滚动视图,并将其添加为子视图但没有帮助,也许我做错了,我不知道,但我真的没有选项和从中获取想法的来源。
答案 0 :(得分:2)
首先,您可以直接从UIScrollView继承:
class Draw2D: UIScrollView {
接下来,您需要将UIScrollView的内容大小设置为您插入的元素的高度。例如,让我们说你有4个圈子:
let radius: CGFloat = 200
var contentHeight: CGFloat = 0
for i in 0...4 {
// initialize circle here
var circle = UIView()
// customize the view
circle.layer.cornerRadius = radius/2
circle.backgroundColor = UIColor.redColor()
// set the frame of the circle
circle.frame = CGRect(x: 0, y: CGFloat(i)*radius, width: radius, height: radius)
// add to scroll view
self.addSubview(circle)
// keep track of the height of the content
contentHeight += radius
}
此时,您依次有4个圆圈,总计高达800像素。因此,您可以按如下方式设置滚动视图的内容大小:
self.contentSize = CGSize(width: self.frame.width, height: contentHeight)
至于contentHeight&gt;设备屏幕高度,然后您的视图将滚动。
以下完整的工作代码:
import UIKit
import Foundation
class Draw2D: UIScrollView {
override init(frame: CGRect) {
super.init(frame: frame)
let radius: CGFloat = 200
var contentHeight: CGFloat = 0
for i in 0...4 {
// initialize circle here
var circle = UIView()
// customize the view
circle.layer.cornerRadius = radius/2
circle.backgroundColor = UIColor.redColor()
// set the frame of the circle
circle.frame = CGRect(x: 0, y: CGFloat(i)*radius, width: radius, height: radius)
// add to scroll view
self.addSubview(circle)
// keep track of the height of the content
contentHeight += radius
}
self.contentSize = CGSize(width: self.frame.width, height: contentHeight)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}