小编bch*_*rry的帖子

如何用CAShapeLayer和UIBezierPath绘制一个光滑的圆?

我试图通过使用CAShapeLayer并在其上设置圆形路径来绘制一个描边圆.但是,这种方法在渲染到屏幕时的效果始终低于使用borderRadius或直接在CGContextRef中绘制路径.

以下是所有三种方法的结果: 在此输入图像描述

请注意,第三个渲染效果不佳,尤其是在顶部和底部的笔划内.

将该contentsScale属性设置为[UIScreen mainScreen].scale.

这是我对这三个圆圈的绘图代码.使CAShapeLayer顺利绘制的缺失是什么?

@interface BCViewController ()

@end

@interface BCDrawingView : UIView

@end

@implementation BCDrawingView

- (id)initWithFrame:(CGRect)frame
{
    if ((self = [super initWithFrame:frame])) {
        self.backgroundColor = nil;
        self.opaque = YES;
    }

    return self;
}

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

    [[UIColor whiteColor] setFill];
    CGContextFillRect(UIGraphicsGetCurrentContext(), rect);

    CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(), NULL);
    [[UIColor redColor] setStroke];
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 1);
    [[UIBezierPath bezierPathWithOvalInRect:CGRectInset(self.bounds, 4, 4)] stroke];
}

@end

@interface BCShapeView : UIView

@end

@implementation BCShapeView

+ (Class)layerClass
{
    return [CAShapeLayer class];
} …
Run Code Online (Sandbox Code Playgroud)

core-graphics calayer uikit cashapelayer ios

74
推荐指数
2
解决办法
4万
查看次数

如何使用低分辨率,裁剪的照片作为重新裁剪原稿的高分辨率副本的指南?

我有一张方形,低分辨率的照片,由高分辨率,非正方形原件裁剪(由用户).然后将低分辨率照片向下调整为缩略图.我想自动(不需要用户干预)以相同的方式重新裁剪原始照片,以获得更高分辨率的方形版本.我无法访问原始裁剪器坐标.我只有这两张照片.

以下是一些示例图片(来自我的Facebook个人资料)来说明我的意思:

原创,高分辨率照片 - 裁剪,然后收缩,方形照片

同样,我们的目标是使用小照片作为指南,从源头获得更高分辨率的方形照片.

解决方案的唯一限制是:

  1. 一般性:我用这个用于个人资料图片,所以如果它只适用于完全可以接受的面孔!无需概括为各种随机图像,人们的照片是一个很好的起点.
  2. 平台:我正在使用Node,但我很乐意在Ruby,Python,Java或C++(带有Node绑定)中运行这个过程.它几乎肯定会在Heroku或AWS上运行.
  3. 速度:它需要相当快速.为了使它有用,它必须以联机方式运行,因为我将阻止用户的界面等待此操作.

有没有人有任何想法?我对图像处理知之甚少,所以我真的不知道从哪里开始.

编辑:对于Facebook,特别是,有一个解决方案,并不是那么难.原始作物数据可用于配置文件图像:https://graph.facebook.com/bcherry/profile?fields = pic_crop

这将使我超越我的直接障碍,但可能不是一个长期的解决方案,因此下面提供的答案仍然对更普遍的问题非常有帮助.

image imagemagick image-processing node.js

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

如何在不阻止 jQuery 中默认值的情况下阻止父级上的委托处理程序?

有什么方法可以防止<a>在其父级上触发委托单击处理程序的单击,同时允许<a>发生 的默认行为(导航到href)。

这是一个例子,说明了我的要求。

<div class="top">
    <div class="middle">
        <a href="google.com" class="link">link</a>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

还有我的 JavaScript:

$(".top").delegate(".middle", "click", function(event) {
   alert("failure");
});

$(".top").delegate(".link", "click", function(event) {
   // ???
});
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我希望在单击链接时导航到 google.com,但alert("failure")在退出时不能看到 。

该解决方案有一些限制:

  1. 所有事件处理程序都必须委托给$(".top"),因为我的页面中可能有数千个这样的事件处理程序。
  2. 导航必须使用浏览器默认行为来完成,而不是window.location = $(this).attr("href")或类似

使用普通的事件绑定,我可以e.stopPropagation()在 的单击处理程序中执行一个操作<a>,但由于委托的性质,这将不起作用。jQuery 提供了另一种名为 的方法,.stopImmediatePropagation()该方法描述了我想要的内容(防止当前元素上的其他处理程序,在本例中为保存委托处理程序的元素),但在这种情况下实际上并没有完成它。这可能是一个错误.delegate(),我不确定。

false从的单击处理程序返回<a>将阻止其他处理程序运行,但也会执行.preventDefault(),因此浏览器将不会导航。基本上,我想知道return false;e.stopImmediatePropagation(); e.preventDefault();不是什么。根据文档,它们应该是等效的。

对于上述代码的现场演示,这里有一个 JSFiddle:https ://jsfiddle.net/CHn8x/

javascript jquery events delegation

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