是否有GUI工具检查iOS应用程序的视图层次结构?我正在考虑Webkit的Web检查器或类似的工具.我正在调试布局问题,例如具有错误位置或大小的视图,或者未正确包含其父级的子级.目前我必须添加断言,手动测试这些不同的条件,或者在不同的视图上设置不同的背景颜色,并且你可以想象,这是一个非常繁琐的方法.
我查看了仪器UI recorder
,但它只记录和播放UI动作,并且无论如何,仅适用于Mac应用程序.
有更好的解决方案吗?
......当它在前景时.
对于拥有256MB RAM的原始iPad,我发现我的应用程序在被杀之前最多可以使用100-140MB.
现在的情况如何?我可以去买一堆iDevices并自己做一个测试,但我想检查一下:有人做过测试吗?
我知道这没有一个确切的答案,而且我正在寻找一个范围,例如:"应用程序在512MB设备上使用300-350MB时就会被杀死.你可以安全地使用高达300MB."
特别:
在具有512MB内存的设备上,一个应用程序可以使用多少?
在具有1GB内存的设备上,一个应用程序如何使用?
以上是否有区别?为了在后台保留一些应用程序,每个应用程序是否限制为固定数量的内存,或者前台应用程序可以从内存中踢出所有后台应用程序,并将整个1GB(或512MB)带到自身(以及OS,当然)?
该设备是iPad还是iPhone?如果我让我的应用程序在具有512MB内存的iPad上运行,是否意味着它也适用于具有512MB内存的iPhone,反之亦然?我知道UIViews和他们的核心动画支持商店会因为更大的屏幕尺寸而在iPad上占用更多内存,但除此之外,iPhone和具有相同内存的iPad之间的内存情况是否相同?
我指的是进程使用的总内存 - 堆,堆栈,静态数据,代码,Core Animation后备存储等.
如果您倾向于说它取决于操作系统版本,您可以假设我们正在谈论iOS 7.
我知道使用太多内存意味着当我的应用程序进入后台时,iOS会更快地终止它.我现在对这个权衡很好.
问题:UILabel
假设宽度为300像素,确定所需的尺寸(线数).字符串更长,所以我设置为lineBreakMode
to UILineBreakModeWordWrap
并调用sizeThatFits
以尝试确定大小.但它在一行中给出了457像素的宽度,而不是两行中预期的300像素.
请参阅:
CGSize available = CGSizeMake(300, INFINITY);
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 400)] autorelease];
label.text = title;
label.lineBreakMode = UILineBreakModeWordWrap;
label.font = [UIFont fontWithName:kBoldFont size:kTitleFontSize];
label.numberOfLines = 3;
CGSize sizedtoFit = [label sizeThatFits:available];
Run Code Online (Sandbox Code Playgroud)
但我发现sizetoFit变量的宽度为457像素,高度为22像素,UI显示一条带有剪切文本的行.我预计宽度为300像素,两条线的高度为44像素.
数字线的UILabel文档说:
使用该sizeToFit
方法调整接收器大小时,调整大小会考虑存储在此属性中的值.例如,如果此属性设置为3,则该sizeToFit
方法会调整接收器的大小,使其足够大以显示三行文本.
我尝试了各种组合:
CGRectZero
给init函数,传递300x400或300 x无穷大.init
函数.[sizeToFit]
并希望它计算假设当前宽度的高度,但事实并非如此.layoutIfNeeded
.它们都不起作用.我做错了什么,或者这是文档和框架实现不一致的错误?谢谢.
我们可以要求AVFoundation以BGRA等处理格式捕获照片,或要求它捕获RAW,然后使用Core Image将其处理到BGRA.后者让我们控制过程中使用的参数,而不是让它保持iOS使用的默认值.
在我的情况下,我想关闭降噪,但其他方面的图像与BGRA相似.所以我尝试过:
let rawData = AVCapturePhotoOutput.dngPhotoDataRepresentation(forRawSampleBuffer: self,
previewPhotoSampleBuffer: nil)!
let options: [AnyHashable : Any] = [
kCIInputNoiseReductionAmountKey: 0.0,
kCIInputLuminanceNoiseReductionAmountKey: 0.0,
kCIInputColorNoiseReductionAmountKey: 0.0]
let rawFilter = CIFilter(imageData: rawData, options: options)!
let outputImage = rawFilter.outputImage!
let context = CIContext()
let cgImage = context.createCGImage(outputImage, from: outputImage.extent)!
let uiImage = UIImage(cgImage: cgImage)
let data = UIImageJPEGRepresentation(uiImage, jpegQuality)!
// Save the data using PHPhotoLibrary
Run Code Online (Sandbox Code Playgroud)
但这会导致看起来更亮的RAW ......
......比BGRA:
右键单击照片并在新选项卡中打开以查看差异.
这只是一张照片,作为一个例子.我测试了许多不同的场景,发现无论我尝试什么设置,我都无法匹配JPEG的质量 - 它太亮,太暗,或者对比度太大等等.
然后我注意到有一个输入boost参数,默认值为1表示完全提升,所以我将其设置为0:
let options: [AnyHashable: Any] = [kCIInputBoostKey: 0.0]
Run Code Online (Sandbox Code Playgroud)
但这产生了一个没有足够对比度的暗淡图像:
因此,问题是我应该使用什么设置让Core Image以与AVFoundation捕获的BGRA相同的视觉外观开发RAW到BGRA,除非没有降噪.
我正在尝试使用相机拍摄两张图像,并使用iOS Vision框架对齐它们:
func align(firstImage: CIImage, secondImage: CIImage) {
let request = VNTranslationalImageRegistrationRequest(
targetedCIImage: firstImage) {
request, error in
if error != nil {
fatalError()
}
let observation = request.results!.first
as! VNImageTranslationAlignmentObservation
secondImage = secondImage.transformed(
by: observation.alignmentTransform)
let compositedImage = firstImage!.applyingFilter(
"CIAdditionCompositing",
parameters: ["inputBackgroundImage": secondImage])
// Save the compositedImage to the photo library.
}
try! visionHandler.perform([request], on: secondImage)
}
let visionHandler = VNSequenceRequestHandler()
Run Code Online (Sandbox Code Playgroud)
但这会产生严重错位的图像:
您可以看到我尝试了三种不同类型的场景 - 特写主题,室内场景和室外场景.我尝试了更多的室外场景,几乎每一个场景的结果都是一样的.
在最坏的情况下,我期待轻微的错位,但不是完全错位.出了什么问题?
我没有将图像的方向传递到Vision框架中,但这不应该是对齐图像的问题.这仅仅是面部检测等问题,在这种情况下,旋转的面部不会被检测为面部.在任何情况下,输出图像都具有正确的方向,因此方向不是问题.
我的合成代码工作正常.这只是Vision框架的一个问题.如果我删除了对Vision框架的调用,放上三脚架的手机,组合就能完美运行.没有错位.所以问题是Vision框架.
这是在iPhone X上.
如何让Vision框架正常工作?我可以告诉它使用陀螺仪,加速度计和罗盘数据来改善对齐吗?
image-processing computer-vision cgaffinetransform ios sequence-alignment
AVCaptureVideoDataOutput有一个字段availableVideoCodecTypes,它应该告诉你可以用来录制视频的编解码器,但它总是空的.为什么是这样?
我在创建VideoDataOutput后立即检查了它的值,并在将其添加到会话后,但它是空的.我尝试使用运行iOS 10的iPhone 5s和运行iOS 11的iPhone 7 Plus,两者都是空的.
这个问题是关于AVCaptureVideoDataOutput.AVCaptureMovieFileOutput有另一个具有相同名称的字段,但是问题与此无关.
可以说VideoDataOutput为您提供帧而不是记录到文件,因此不涉及编解码器,这就是属性为零的原因,但在这种情况下,为什么要拥有该属性?
Core Image 让我们为 CIContext 指定颜色空间,如下所示:
let context = CIContext(options: [kCIContextOutputColorSpace: NSNull(),
kCIContextWorkingColorSpace: NSNull()])
Run Code Online (Sandbox Code Playgroud)
或者对于 CIImage,如下所示:
let image = CIImage(cvImageBuffer: inputPixelBuffer,
options: [kCIImageColorSpace: NSNull()])
Run Code Online (Sandbox Code Playgroud)
这三者有何关系:
设置它们各自的优点和缺点是什么?
我知道如何使用类别作为程序员,但我很好奇它们是如何实现的.编译器是否将它们编译为从静态初始化程序调用class_replaceMethod?谢谢.
如果我想定义一个自定义的UIView子类,它在设置边界时做了什么,我该如何覆盖setter?覆盖setBounds似乎很危险,因为如果我理解正确,getter和setter名称不是公共接口的一部分,并且可能随时更改.
当然,我用class_copyPropertyList查询运行时在类中定义的属性列表,然后查询它的setter的名字,最后用class_addMethod添加的方法,在第一次得到一个参考前面的方法使用调用原始版本.
这一切看起来都很糟糕.是否有一种干净的方式来做我想要的,保证在未来的操作系统版本上不会中断?谢谢.
我正在尝试在我的iOS相机应用程序中检测面部,但它无法正常工作,而它在Camera.app中正常工作.请注意:
为什么会这样?
我的代码如下.你觉得有什么不对吗?
首先,我创建一个视频输出如下:
let videoOutput = AVCaptureVideoDataOutput()
videoOutput.videoSettings =
[kCVPixelBufferPixelFormatTypeKey as AnyHashable:
Int(kCMPixelFormat_32BGRA)]
session.addOutput(videoOutput)
videoOutput.setSampleBufferDelegate(faceDetector, queue: faceDetectionQueue)
Run Code Online (Sandbox Code Playgroud)
这是代表:
class FaceDetector: NSObject, AVCaptureVideoDataOutputSampleBufferDelegate {
func captureOutput(_ captureOutput: AVCaptureOutput!,
didOutputSampleBuffer sampleBuffer: CMSampleBuffer!,
from connection: AVCaptureConnection!) {
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
let features = FaceDetector.ciDetector.features(
in: CIImage(cvPixelBuffer: imageBuffer))
let faces = features.map { $0.bounds }
let imageSize = CVImageBufferGetDisplaySize(imageBuffer)
let faceBounds = faces.map { (face: CIFeature) -> CGRect in
var …
Run Code Online (Sandbox Code Playgroud) ios ×7
iphone ×5
cocoa-touch ×3
avcapture ×2
avfoundation ×2
uikit ×2
camera ×1
categories ×1
cgcolorspace ×1
cidetector ×1
cifilter ×1
ciimage ×1
cocoa ×1
codec ×1
color-space ×1
core-image ×1
dng ×1
internals ×1
ios7 ×1
ipad ×1
memory ×1
objective-c ×1