我实现了一个非常简单的填写使用圆圈UIBezierPath,然后我转换成UIImage这样我可以设置到UITableViewCell的imageView。这确实很好,但是您可以在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) 我想以UIImageView编程方式实现,但是当我应用自动布局约束时,它不能像我预期的那样工作.为简单起见,我将图像视图的帧设置为100 x 100.这很有效,但是一旦我添加自动布局约束,帧大小就不再受到尊重,图像将以其完整大小呈现(在这种情况下) ,320px宽)而不是缩小以适应图像视图框架.
为什么这样,我怎样才能获得所需的行为?我想要一个100x100的图像视图,它可以根据纵横比缩小图像,并且位于屏幕中间居中的底部50.
let imageView = UIImageView(frame: CGRectMake(0, 0, 100, 100))
imageView.image = UIImage(named: "myimg")
imageView.contentMode = .ScaleAspectFit
imageView.clipsToBounds = true
imageView.setTranslatesAutoresizingMaskIntoConstraints(false)
self.view.addSubview(imageView)
self.view.addConstraint(NSLayoutConstraint(item: imageView, attribute: .Bottom, relatedBy: .Equal, toItem: self.view, attribute: .Bottom, multiplier: 1, constant: -50))
self.view.addConstraint(NSLayoutConstraint(item: imageView, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0))
Run Code Online (Sandbox Code Playgroud) 想象一下你知道你是一个String的值的情况,但是这个字符串可以是一个字母或多个字母,也可以是一个数字.现在,您想要对此值设置switch语句.您希望为任何数字运行相同的代码块,但不希望必须写出引号中的每个数字来捕获所有情况.
这有效,但如何清理它,以便您不必写出每个可能的数字?
let str = "8"
switch str {
case "a": println("is a")
case "gb": println("is gb")
case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" : println("is a digit")
}
Run Code Online (Sandbox Code Playgroud)
你可以创建一系列实际上是字符串的Int并在case语句中对其进行测试,还是可以更改你在案例中打开的值?例如,您可以将String转换为Int,如果它在0-9范围内,那么您知道原始String是一个数字.有点像case str.toInt() in 0...9?一种解决方案虽然比上面的代码更不友好,但是创建一个数字数组然后测试它str是否在数组中.
在用户单击页面上的特定元素后,我将click事件侦听器附加到document。但是,在onclick调用函数后立即调用此事件侦听器,这是不可取的。它似乎对两者onclick和刚刚添加的document click侦听器使用相同的点击事件。
如何确保我添加到文档中的事件侦听器在下一次单击发生之前不会被调用?
document.getElementById('someID').onclick = function(e) {
document.addEventListener('click', myDocClickListener);
return false; //handled click
}
function myDocClickListener(e) {
//...
//should only be called for future clicks not the one that just occurred in the above function
}
Run Code Online (Sandbox Code Playgroud) 我需要知道字符串是否采用以下格式:
这允许任意数量的数字,我认为它是正确的格式允许一个由句点后跟两位数组成的可选组,但由于某种原因,这不允许小数.也许十进制没有适当地转义?
@"^[0-9]+(\\.[0-9][0-9])?$"
Run Code Online (Sandbox Code Playgroud)
我试过@"^[0-9]+(\.[0-9][0-9])?$"但是Xcode抛出编译时警告:Unknown escape sequence \..
我需要获取按拍摄日期排序的三张照片 - 最新是最近拍摄的。我目前这样做的方法是获取所有照片资产,然后以适当的索引(0、1、2)获取资产。虽然这有效,但我很好奇当我只对前三名感兴趣时是否有更有效的方法来做到这一点。文档解释了 fetch 不会返回所有图像数据 - 只有元数据,但我仍然不需要获取所有元数据。是否有PHFetchOptionI 可以用来限制 fetch 或NSPredicate,或者不必担心?
var assetsFetchResults = PHAsset.fetchAssetsWithMediaType(.Image, options: nil)
let imageManager = PHCachingImageManager()
if assetsFetchResults?.count > 0 {
var asset = assetsFetchResults?[0] as? PHAsset
imageManager.requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFill, options: nil, resultHandler: ...)
}
//repeat for index 1 and 2
Run Code Online (Sandbox Code Playgroud) iOS 10中添加了一个新API,用于显示用户可以切换到的其他键盘列表 - 用户在系统键盘上长按地球仪时显示的相同列表.该功能的声明如下:
func handleInputModeList(from view: UIView, with event: UIEvent)
我的问题是,生成UIEvent供应的正确方法是什么?我打算用a来调用这个函数,UILongPressGestureRecognizer但这个API没有透露UIEvents.
我想知道访问存储在NSUserDefaults. 这是否比访问一次并将其存储在属性中,然后通过从属性获取它而不是再次获取它来在将来使用它要慢得多NSUserDefaults?或者差异非常微不足道?我知道文档状态NSUserDefaults已缓存。
答案可能取决于您计划获取它的频率。假设每分钟需要 20 次。我不会以编程方式更改它,只会获取当前值。
我很好奇,因为总是获取它的好处之一是你可以保证那是当前值。如果您获取一次并存储它,您需要监听更改,NSUserDefaults然后通过获取它来更新存储的值。
是否可以用于UICollectionViewCompositionalLayout创建包含多个部分的水平滚动集合视图?
我希望创建一个类似于表情符号键盘的布局,它有多个部分,每个部分都附加到前一个的末尾,在一个水平滚动的“组”中,每个部分都有一个标题。
使用以下布局,每个部分垂直堆叠,每个部分水平滚动:
UICollectionViewCompositionalLayout {
(sectionIndex: Int, layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in
let leadingItem = NSCollectionLayoutItem(
layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.7),
heightDimension: .fractionalHeight(1.0)))
leadingItem.contentInsets = NSDirectionalEdgeInsets(top: 10, leading: 10, bottom: 10, trailing: 10)
let trailingItem = NSCollectionLayoutItem(
layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),
heightDimension: .fractionalHeight(0.3)))
trailingItem.contentInsets = NSDirectionalEdgeInsets(top: 10, leading: 10, bottom: 10, trailing: 10)
let trailingGroup = NSCollectionLayoutGroup.vertical(
layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.3),
heightDimension: .fractionalHeight(1.0)),
subitem: trailingItem, count: 2)
let containerGroup = NSCollectionLayoutGroup.horizontal(
layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.85),
heightDimension: .fractionalHeight(0.4)),
subitems: [leadingItem, trailingGroup])
let section = …Run Code Online (Sandbox Code Playgroud) ios ×6
swift ×3
autolayout ×1
cgcontext ×1
cocoa-touch ×1
events ×1
ios13 ×1
javascript ×1
objective-c ×1
phasset ×1
photokit ×1
regex ×1
uibezierpath ×1
uiimage ×1
uiimageview ×1