标签: uibezierpath

在UIImageView上绘制UIBezierPath

怎样绘制UIBezierPathUIImageView?我尝试过以下代码,但是当UIImageView's图像出现时,nil我只能看到路径,当我添加图像时,此路径与UIImageView's图像重叠.我想绘制UIImageVIew's图像上方的路径.

cocoa-touch objective-c uiimageview ios uibezierpath

1
推荐指数
1
解决办法
1386
查看次数

填充UIBezierPath会导致图像上下文中的像素化图像

我实现了一个非常简单的填写使用圆圈UIBezierPath,然后我转换成UIImage这样我可以设置到UITableViewCellimageView。这确实很好,但是您可以在Retina显示屏上看到边缘像素化。为什么会那样,怎么做才能确保它看起来很棒?

let colorSize = cell.frame.size.height - 20
let rect = CGRectMake(0, 0, colorSize, colorSize)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
UIBezierPath(roundedRect: rect, cornerRadius: (colorSize)/2).addClip()
CGContextSetFillColorWithColor(context, UIColor.redColor().CGColor);
CGContextFillRect(context, rect)
var colorImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
cell.imageView?.image = colorImage
Run Code Online (Sandbox Code Playgroud)

uiimage cgcontext ios uibezierpath swift

1
推荐指数
1
解决办法
798
查看次数

绘制部分圆

我正在编写一个程序,它将取一个介于 0 和 1 之间的数字,然后吐出一个圆(或我猜是圆弧),它完成了那么多。

比如输入0.5,程序会输出一个半圆

如果为 0.1,程序将输出一个很小的小弧,最终将是整个圆的 10%。

我可以通过使角度起点为 0 和角度终点来实现此目的 2*M_PI*decimalInput

但是,我需要在圆的顶部有起点,所以起点是3*M_PI_2,终点是7*M_PI_2

我只是在用这些新的起点/终点绘制一个部分完整的圆圈时遇到了麻烦。我承认,我的数学不是最好的,所以任何建议/意见都值得赞赏

这是我到目前为止所拥有的

var decimalInput = 0.75 //this number can be any number between 0 and 1
let start = CGFloat(3*M_PI_2)
let end = CGFloat(7*M_PI_2*decimalInput)

let circlePath = UIBezierPath(arcCenter: circleCenter, radius: circleRadius, startAngle: start, endAngle: end, clockwise: true)

circlePath.stroke()
Run Code Online (Sandbox Code Playgroud)

尽管我尝试过,但我似乎无法做到正确。我认为结束角度是罪魁祸首,除非我以错误的方式解决这个问题

uibezierpath swift

1
推荐指数
1
解决办法
5455
查看次数

检测厚 UIBezierPath 上的触摸

在我的应用程序的绘图部分,用户应该能够选择他们创建的路径。UIBezierPath有一个方便的方法containsPoint:,在大多数情况下效果很好,但是当绘制的线接近没有曲线的直线时,它会特别糟糕。让你的手指碰到一条直线是非常困难的。

该方法似乎只检查路径上很窄的一条线,即使将lineWidth路径的属性设置为较大的值也不会影响containsPoint:测试结果。

我看过类似的问题,比如这个:检测 UIBezierPath 笔触上的触摸,不是填充但无法修改解决方案以查看“路径周围的区域”,它似乎只查看中心的细线其中。

编辑

我提出的一个有效但密集的解决方案是将路径转换为 ​​aUIImage并在请求的点检查该图像的颜色。如果 alpha 分量大于零,则路径与触摸相交。

这看起来像这样:

// pv is a view that contains our path as a property
// touchPoint is a CGPoint signifying the location of the touch
PathView *ghostPathView = [[PathView alloc] initWithFrame:pv.bounds];
ghostPathView.path = [pv.path copy]; // make a copy of the path
// 40 px is about thick enough to touch reliably
ghostPathView.path.lineWidth = 40; 
// the two magic …
Run Code Online (Sandbox Code Playgroud)

objective-c quartz-graphics ios uibezierpath

1
推荐指数
1
解决办法
1309
查看次数

Swift中的简单线条绘制动画

我是新手,对我遇到的这个问题感到沮丧.

我想要做的非常简单:在屏幕中央画一条直线并为其制作动画.听起来很简单吧?是啊..这就是我现在所拥有的.

import UIKit

class Drawings: UIView {


    override func drawRect(rect: CGRect) {

        let screensize: CGRect = UIScreen.mainScreen().bounds
        let screenWidth = screensize.width
        let screenHeight = screensize.height

        //context
        let context = UIGraphicsGetCurrentContext()
        CGContextSetLineWidth(context, 7.0)
        CGContextSetStrokeColorWithColor(context, UIColor.whiteColor().CGColor)

        //path
        CGContextMoveToPoint(context, screenWidth, screenHeight * 0.5)
        CGContextAddLineToPoint(context, screenWidth * 0.5, screenHeight * 0.5)

        CGContextSetLineCap(context, CGLineCap.Round)

        //draw
        CGContextStrokePath(context)

    }

}
Run Code Online (Sandbox Code Playgroud)

我问的原因是我发现我无法为它设置动画,因为它在drawRect函数中.真的吗?需要你们的一些解释.谢谢!

图片

core-animation drawrect uibezierpath swift swift2

1
推荐指数
1
解决办法
3043
查看次数

如何通过3个点画圆弧

如何绘制如图所示的弧,假设我有一个 UIView 作为可移动线的中点。

在此处输入图片说明

在此处输入图片说明

我在 CGPoint 名称 lineStartPoint 和终点作为 lineEndPoint 存储线的起点。

可以通过名为movingPoint 的CGPoint 访问移动对象。

预先感谢您的帮助。

core-graphics objective-c ios uibezierpath

1
推荐指数
1
解决办法
1406
查看次数

如何在按钮边界外禁用TouchUpInside Action

这是我的Xib.我只是拖了一个UIButton并改变了它的背景颜色.

在此输入图像描述

我使用此代码创建了一个半圆图层

    let circlePath = UIBezierPath.init(arcCenter: CGPointMake(mybutton.bounds.size.width / 4, 0), radius: mybutton.bounds.size.height, startAngle: 0.0, endAngle: CGFloat(M_PI), clockwise: true)
    let circleShape = CAShapeLayer()
    circleShape.path = circlePath.CGPath
    mybutton.layer.mask = circleShape
Run Code Online (Sandbox Code Playgroud)

这是我的输出.

在此输入图像描述

它完美,因为我想要它.但问题是这个按钮可以在其圆形区域外点击(根据按钮的实际形状).我希望它只能作为圆形可点击.

我怎样才能做到这一点?谢谢.

cashapelayer ios uibezierpath swift

1
推荐指数
1
解决办法
404
查看次数

在ovalInRect 中的起点

有没有办法将起点从ovalInRect 形式的“右”更改为“左”?似乎无论我如何创建它,“起点”总是在“右侧......

 let ovalPath = UIBezierPath(ovalInRect: CGRect(x: 515, y: 276.5, width: 280.5, height: 214.5))
        let ovalShapeLayer = CAShapeLayer()
        ovalShapeLayer.fillColor = UIColor.clearColor().CGColor
        ovalShapeLayer.strokeColor = UIColor.lightGrayColor().CGColor
        ovalShapeLayer.lineWidth = 1.5
        ovalShapeLayer.path = ovalPath.CGPath

        self.view.layer.insertSublayer(ovalShapeLayer, atIndex: 1)
Run Code Online (Sandbox Code Playgroud)

谢谢

ios uibezierpath swift2

1
推荐指数
1
解决办法
424
查看次数

使用 UIBezierPath 用渐变色填充圆形边框

我想使用UIBazierpath渐变色填充圆的一半边框。

最初我尝试使用完整的圆圈但它不起作用,渐变总是填充圆圈而不是边框​​。有没有办法做到这一点?

这是我到目前为止所拥有的:

let path = UIBezierPath(roundedRect: rect, cornerRadius: rect.width/2)
let shape = CAShapeLayer()
shape.path = path.cgPath
shape.lineWidth = 2.0
shape.strokeColor = UIColor.black.cgColor
self.layer.addSublayer(shape)

let gradient = CAGradientLayer()
gradient.frame = path.bounds
gradient.colors = [UIColor.magenta.cgColor, UIColor.cyan.cgColor]

let shapeMask = CAShapeLayer()
shapeMask.path = path.cgPath
gradient.mask = shapeMask
shapeMask.lineWidth = 2

self.layer.addSublayer(gradient)
Run Code Online (Sandbox Code Playgroud)

编辑:添加了图像。我想实现这样的目标。在此处输入图片说明

gradient uibezierpath swift

1
推荐指数
1
解决办法
1266
查看次数

绘制到 CGContext 时如何设置 UIBezierPath 的线宽?

我正在尝试使用提供的 UIBezierPath 创建一个 UIImage。不幸的是,无论我设置什么setLineWidth,结果总是 1 分:

extension UIBezierPath {
    func image(fillColor: UIColor, strokeColor: UIColor) -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(bounds.size, false, 1.0)
        guard let context = UIGraphicsGetCurrentContext() else {
            return nil
        }

        context.setLineWidth(10)
        context.setFillColor(fillColor.cgColor)
        context.setStrokeColor(strokeColor.cgColor)

        self.fill()
        self.stroke()

        let image = UIGraphicsGetImageFromCurrentImageContext()

        UIGraphicsEndImageContext()

        return image
    }
}
Run Code Online (Sandbox Code Playgroud)

在一个带有圆圈的测试项目中尝试这个,例如:

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let imageView = UIImageView()
        imageView.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
        view.addSubview(imageView)

        let bezierPath = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: …
Run Code Online (Sandbox Code Playgroud)

core-graphics cgcontext ios uibezierpath swift

1
推荐指数
1
解决办法
1096
查看次数