如何在 UIScrollView 中绘制自定义形状

Posted

技术标签:

【中文标题】如何在 UIScrollView 中绘制自定义形状【英文标题】:How to draw custom shapes inside UIScrollView 【发布时间】:2014-03-03 08:54:16 【问题描述】:

您好,我正在尝试使用 UISCrollView 创建自己的时间线视图

    我想创建大小为 1200、50 的年视图(需要使用石英库绘制)。

示例代码是:

- (void)drawYearScaleMain

     CGContextRef context = UIGraphicsGetCurrentContext();
     CGContextSetRGBFillColor(context, 1.0, 0.6, 0.2, 0.8);
     CGContextMoveToPoint(context, self.bounds.origin.x, self.bounds.origin.y);
     CGContextAddLineToPoint(context, self.contentSize.width, self.bounds.origin.y);
     CGContextAddLineToPoint(context, self.contentSize.width, 50);
     CGContextAddLineToPoint(context, self.bounds.origin.x, 50);
     CGContextAddLineToPoint(context, self.bounds.origin.x, self.bounds.origin.y);
     CGContextFillPath(context);
 
    现在我想使用相同类型的绘图代码创建月视图:

示例代码:

- (void)drawMonthScaleSub

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 0.0, 0.6, 0.2, 0.8);

    CGFloat topLeftX = self.bounds.origin.x;
    CGFloat topLeftY = 50;
    CGFloat width = 98;
    CGFloat height = 30;

    for(int count = 0; count<12; count++)
    
        CGRect frame = CGRectMake(topLeftX, topLeftY, width, height);
        CGContextFillRect(context, frame);
        topLeftX = topLeftX + 10 + width;
    


但是如果我滚动我的滚动视图,我在这个视图中绘制的内容不会滚动,如果我的代码有任何错误,或者有任何其他最佳方式来实现这一点。

请给我建议。

提前致谢。

【问题讨论】:

我认为你错过了在滚动视图中添加的所有内容......并为滚动视图提供适当的内容大小 尝试使用 UIView 子类并使用它的 drawRect: 方法进行绘制,但它作为滚动视图中的子视图。 我在 UIScrollView 子类的 drawRect: 方法中调用了这个方法。仍然在滚动视图时,自定义绘制不会随着视图滚动。我的滚动视图 contentSize 是 (1200, 1200) 【参考方案1】:

我认为你应该创建一个 UIView 的子类并重新实现DrawRect: 方法。然后你应该把这个视图放在你的滚动视图中。

【讨论】:

以上是关于如何在 UIScrollView 中绘制自定义形状的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中绘制自定义动态高度曲线形状?

如何使用 WPF 中的 TextShape 类绘制自定义形状?

如何在 Android 中使用 XML 作为可绘制对象创建自定义形状?

Android:绘制自定义形状

SpriteKit:如何在没有 SKShapeNode 的情况下绘制自定义形状?

如何在 UIScrollView 的“反弹”区域中绘制?