gpt4 book ai didi

html5-canvas - Cappuccino Web Framework中是否有类似HTML5 Canvas的控件?

转载 作者:行者123 更新时间:2023-12-03 13:38:02 25 4
gpt4 key购买 nike

我正在Cappuccino中创建一个Webapp,我需要一种在CPWindow上绘制形状(矩形,图像等)的方法。我可以使用任何小部件/控件来执行此操作吗?在其他框架(例如Sproutcore)中是否有类似这样的控件?还是我必须实现自己的?

我也想知道是否有一种方法可以制作可拖动的like this形状?

最佳答案

在 Cappuccino 中,您可以在任何 View 中执行自定义绘图。为此,请重写drawRect:方法(继承自CPView的所有方法,几乎​​是每个控件的方法)。您可以使用 CPBezierPath 这样的CPGraphics工具,也可以使用像 CGContextAddPath 这样的命令使用CoreGraphics进行绘图-了解有关在Core Graphics for Mac OS X上绘制Apple文档的后一种样式的更多信息是有用的。请记住, Cappuccino 是基于Objective-C和 cocoa 的。

这是一个示例 View ,该示例在圆角矩形中绘制带有虚线边框的黄色星星,其大小适合当前 View :

@implementation CustomDrawView : CPView
{
}

- (void)drawRect:(CGRect)aRect
{
[super drawRect:aRect];

[[CPColor whiteColor] set];
[[CPBezierPath bezierPathWithRect:bounds] fill];

var frame =[self bounds],
shadow = [[CPShadow alloc] init];

[shadow setShadowColor:[CPColor blackColor]];
[shadow setShadowOffset:CGSizeMake(0, 3)];
[shadow setShadowBlurRadius:5];

//// Rounded Rectangle Drawing
var roundedRectanglePath = [CPBezierPath bezierPathWithRoundedRect:CGRectMake(CGRectGetMinX(frame) + 3.5, CGRectGetMinY(frame) + 3.5, CGRectGetWidth(frame) - 7, CGRectGetHeight(frame) - 7) xRadius:7 yRadius:7];
[[CPColor blackColor] setStroke];
[roundedRectanglePath setLineWidth:1];
var roundedRectanglePattern = [5, 1, 1, 1];
[roundedRectanglePath setLineDash:roundedRectanglePattern phase:0];
[roundedRectanglePath stroke];

var starPath = [CPBezierPath bezierPath];
[starPath moveToPoint:CGPointMake(CGRectGetMinX(frame) + 0.50000 * CGRectGetWidth(frame), CGRectGetMinY(frame) + 0.20513 * CGRectGetHeight(frame))];
[starPath lineToPoint:CGPointMake(CGRectGetMinX(frame) + 0.43029 * CGRectGetWidth(frame), CGRectGetMinY(frame) + 0.35357 * CGRectGetHeight(frame))];
[starPath lineToPoint:CGPointMake(CGRectGetMinX(frame) + 0.31200 * CGRectGetWidth(frame), CGRectGetMinY(frame) + 0.40445 * CGRectGetHeight(frame))];
[starPath lineToPoint:CGPointMake(CGRectGetMinX(frame) + 0.38720 * CGRectGetWidth(frame), CGRectGetMinY(frame) + 0.54707 * CGRectGetHeight(frame))];
[starPath lineToPoint:CGPointMake(CGRectGetMinX(frame) + 0.38381 * CGRectGetWidth(frame), CGRectGetMinY(frame) + 0.72696 * CGRectGetHeight(frame))];
[starPath lineToPoint:CGPointMake(CGRectGetMinX(frame) + 0.50000 * CGRectGetWidth(frame), CGRectGetMinY(frame) + 0.66667 * CGRectGetHeight(frame))];
[starPath lineToPoint:CGPointMake(CGRectGetMinX(frame) + 0.61619 * CGRectGetWidth(frame), CGRectGetMinY(frame) + 0.72696 * CGRectGetHeight(frame))];
[starPath lineToPoint:CGPointMake(CGRectGetMinX(frame) + 0.61280 * CGRectGetWidth(frame), CGRectGetMinY(frame) + 0.54707 * CGRectGetHeight(frame))];
[starPath lineToPoint:CGPointMake(CGRectGetMinX(frame) + 0.68800 * CGRectGetWidth(frame), CGRectGetMinY(frame) + 0.40445 * CGRectGetHeight(frame))];
[starPath lineToPoint:CGPointMake(CGRectGetMinX(frame) + 0.56971 * CGRectGetWidth(frame), CGRectGetMinY(frame) + 0.35357 * CGRectGetHeight(frame))];
[starPath closePath];
[[CPColor yellowColor] setFill];
[starPath fill];
[CPGraphicsContext saveGraphicsState];
[shadow set];
[[CPColor whiteColor] setStroke];
[starPath setLineWidth:3];
var starPattern = [5, 1, 5, 1];
[starPath setLineDash:starPattern phase:2];
[starPath stroke];
[CPGraphicsContext restoreGraphicsState];
}

@end

我从更大的 drawing tests in Cappuccino中提取了这个。

在幕后, Cappuccino 将使用 Canvas (如果有),或在必要时使用VML(对于IE的某些版本)。

关于html5-canvas - Cappuccino Web Framework中是否有类似HTML5 Canvas的控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18205122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com