创建可滚动的UIView(swift + Interface Builder)时出现问题

时间:2015-03-23 18:03:30

标签: ios swift uiview uiscrollview

请不要立即诋毁这个副本,我已经在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中以编程方式创建滚动视图,并将其添加为子视图但没有帮助,也许我做错了,我不知道,但我真的没有选项和从中获取想法的来源。

1 个答案:

答案 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")
    }

}