Tag: 核心graphics

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

我有一个UIScrollView派生实现了一个takeScreenshot方法,看起来像这样: -(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. } 这基本上移动到滚动视图的顶部,并截取可见区域。 当iPad面向人像时,它可以正常工作,但是当它处于横向时,图像的底部被切断(因为可见区域的高度仅为748,而不是1004)。 是否有可能获得UIScrollView的快照,包括不在屏幕上的区域? 或者我需要向下滚动视图,拍摄第二张照片并将它们拼接在一起?

在iOS Core Graphics中,什么是graphicsContext?

当我们这样做时: CGContextRef ctx = UIGraphicsGetCurrentContext(); ctx究竟是什么? 显然这是一个结构。 在哪里定义的结构? 它的成员是什么?

CGContext转换,提取旋转的矩形

我的意图是写一个函数,可以提取一个更大的图像旋转的矩形部分。 该旋转矩形部分用中心点(从0,0到全图像宽度/高度)的大小和旋转angular度来描述。 我担心我不了解CGContexts。 我知道,旋转后,我的坐标空间旋转。 如果angular度为0,则此function始终有效,如果angular度较小,此function显示正确。 但是,随着angular度的增加,一切都被错误地抵消了。 我正在计算类似于图像变换的仿射变换来计算左上angular,以避免任何不准确。 我也尝试了通过应用图像变换来进一步改变左上angular,以及图像变换的逆(就像一个随机的想法)。 这种方法会起作用吗? 我是否错过了某处的空间转换? 注意:通过绘制完整的图像,然后在正确的位置以正确的大小和旋转画出一个黑色的矩形,非常容易使图像区域变黑。 鉴于此,我知道我的投入是正确的。 可视化: 这代表完整的形象,我正在尝试示例旋转矩形: 该图像表示此function的所需输出: – (UIImage*) croppedImage:(UIImage*) image center:(CGPoint) rotationCenter size:(CGSize) size rotation:(CGFloat) rotation { CGFloat fullWidth = image.size.width; CGFloat fullHeight = image.size.height; CGRect imageRect = CGRectMake(0, 0, fullWidth, fullHeight); //must convert UI space to CG space, in this case that just means adjusting […]

iOS中的Mutlitouch绘图

我正在和绘图工程一起工作,而且工作得很好,唯一的问题是,它只能用单点触摸工作。我想要做多点触摸绘图,所以如果用户用两个手指画,那么就应该绘制它们 下面是我的单触式绘图的代码 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; //LocationInView returns the current location of the reciever in coordinate system of the given View. m_previousPoint1 = [touch locationInView:self]; m_previousPoint2 = [touch locationInView:self]; m_currentPoint = [touch locationInView:self]; } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { //AnyObject:- Returns one of the objects in the set, or […]

iOS – 使用两个不同的UIButtons左右旋转图层

我使用CALayer创build了一个图层,并使用旋转animation使用CABasicanimation为其创build了一个图层,并创build了两个TouchDown UIButtons来左右旋转它,当图层旋转到右侧时,出现问题,它恢复到原始angular度,左旋 这是我的代码: -(void)viewDidLoad { //Button 1 UIButton *aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; aButton.frame = CGRectMake(0, 0, 145, 145); aButton.center = CGPointMake(90, 190); aButton.backgroundColor = [UIColor redColor]; [aButton addTarget:self action:@selector(holdDown) forControlEvents:UIControlEventTouchDown]; [aButton addTarget:self action:@selector(holdRelease) forControlEvents:UIControlEventTouchUpOutside]; [aButton addTarget:self action:@selector(holdRelease) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:aButton]; //Button 2 UIButton *bButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; bButton.frame = CGRectMake(0, 0, 145, 145); bButton.center = […]

iOS在静态图像上滑动filter

我正在寻找一种方法来在静止图像上方滑动图像filter。 主要是基础图像保持原位,当您向左或向右滑动时,filter会滑过顶部。 现在我有一个基本的UIImageView和一个集合视图,它在理论上会包含filter(纹理和渐变图像)。 我读过,UIImageViews和UIViews不能实时合成在一起,并且你必须在显示它之前制作图像。 因此,我可以预先在代码中预先制作图像,然后我可以擦拭 – 显示滤镜图像以获得相同的效果? 使用口罩? 代码示例很好,但是关于如何处理这个问题的高级描述会很有帮助。 应用程序Spark有这个function的video,我正在寻找类似的照片。

我想用Quartz来制作一个不同颜色的单色图像

我敢肯定这个答案存在于计算器上,但我一直在寻找,一直没有find它。 从本质上讲,我有几个透明背景图像和一些黑色图像,我想能够将黑色部分的颜色更改为其他任意颜色。 我相对确定这是用Quartz Image Masking实现的,但是我还没有find任何好的例子,所以这就是我正在寻找的。 其他解决scheme也受到欢迎。 谢谢!!! 更新:我觉得我很接近这个代码…但我的面具不工作。 我的UIView虽然得到填充颜色,但它只是一个巨大的矩形,没有任何剪切。 更新#2:我现在更接近(我认为)与下面的代码。 问题是我的背景现在是黑色的,而不是透明的。 CGContextRef context = UIGraphicsGetCurrentContext(); CGContextScaleCTM(context, 1, -1); CGContextTranslateCTM(context, 0, -rect.size.height); CGImageRef maskImage = [self.image CGImage]; CGContextClipToMask(context, rect, maskImage); [_colorToChangeInto setFill]; CGContextFillRect(context, rect);

跟踪UIView中的变化

我有一个子类UIView(currentMapView),它使用从XML文件中提取的一系列CGMutablePaths绘制几个状态的映射。 当用户点击某个状态时,填充颜色会从绿色变为紫色。 现在我找出使用CGPathContainsPoint轻松点击哪个状态来报告哪个path被点击,然后设置该path的填充颜色,并使用setNeedsDisplay重新加载视图。 我遇到的问题是,我需要多次重复使用currentMapView(不同的状态组),我不知道如何跟踪用户点击的path,以便在重新加载时重新着色从XML文件查看。 下面是我正在做的一步一步的例子: currentMapView从XML文件加载path数据并绘制美国东部的地图。 用户点击佛罗里达,然后变成紫色(我使用CGContextSetFillColorWithColor设置佛罗里达path的填充颜色后,我在currentMapView上调用了“setNeedsDisplay”) 用户点击北卡罗来纳州,它变成紫色(我使用CGContextSetFillColorWithColor设置北卡罗莱纳州path的填充颜色后,我在currentMapView上调用setNeedsDisplay) 用户导航到另一个视图,我需要在currentMapView中绘制另一组状态(清除它在那里)。 一切工作正常到这里。 当用户返回第一步的视图,再次绘制美国东部的地图时,我需要再次在佛罗里达州和北卡罗莱纳州的path上着色。 跟踪用户碰到的path的最好方法是什么?

在X轴coreplot上使用Epoch时间

有没有办法我可以使用corepolot scatterplot X轴与时代? 这是我使用的绘图范围。 plotSpace.xRange = [CPTPlotRange plotRangeWithLocation:CPTDecimalFromFloat(1329375688) length:CPTDecimalFromFloat(100)]; 我正在从文件中读取纪元值。 -(void)plot1{ // Start with some simple sanity checks before we kick off if ( (self.scatterPlotView1 == nil) || (self.graphData == nil)) { NSLog(@"TUTSimpleScatterPlot: Cannot initialise plot without scatterPlotView1 or data."); return; } if ( (self.graph != nil) ) { NSLog(@"TUTSimpleScatterPlot: Graph object already exists."); return; […]

渐变颜色到CGContextRef

我正在使用CGContextRef绘制4弧。我可以填充颜色,但现在我想设置渐变颜色的弧。我做了它。它工作正常。现在我想为每个弧设置不同的颜色。是否有任何方法可以做它?请帮助我。我附上我的代码和截图的弧。代码: CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB(); CGFloat comps[] = {1.0,1.0,1.0,1.0,0.0,1.0,1.0,1.0}; CGFloat locs[] = {0,1}; CGGradientRef g = CGGradientCreateWithColorComponents(space, comps, locs, 2); CGContextRef context = UIGraphicsGetCurrentContext(); CGFloat startAngle = 0; CGFloat endAngle = 90; CGFloat radius = 100.0; CGFloat levelWidth = 50; for (int i = 0; i < 4; i++) { CGContextMoveToPoint(context, self.bounds.size.width/2, self.bounds.size.height/2); CGContextAddArc(context, self.bounds.size.width/2, […]