我正在尝试以编程方式创建一个自定义视图控制器,其子视图位于屏幕中心.我已成功,当我导航到此视图时,居中视图显示在中心,并在旋转设备时正确旋转.
但是,在此导航应用程序中,如果我在不处于纵向模式时进入自定义视图,则应该居中的视图会将自身定位在不是屏幕中心的位置.我已经把所有的意见,控制器,父母,奶奶,圣母必要的自动调整大小属性...我已经跑出来的东西粘在自动调整大小面具,仍然例子很糟糕.
我确定我错过了一些可以解决所有问题的神奇方法的调用,但我还没想到要调用什么或者在哪里(setNeedsDisplay?setNeedsLayout?).为了展示这个问题我已经创建了一个提供完整的例子https://github.com/gradha/iPhone-centered-rotation-test您可以克隆,并在模拟器或设备上运行.我是从Apple的导航控制器创建的,只需添加一个假的单元格来推动我手动创建的视图.
定制视图可以被发现在https://github.com/gradha/iPhone-centered-rotation-test/blob/master/Classes/CenteredViewController.m这里是负责创建的中心子视图的方法的loadView:
/* Try to force the parent view to be as we want it. */
self.view.backgroundColor = [UIColor yellowColor];
self.view.autoresizesSubviews = YES;
self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleWidth;
/* Top left blue square, for reference. */
blue_ = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 130, 130)];
[self.view addSubview:blue_];
blue_.backgroundColor = [UIColor blueColor];
[blue_ release];
/* Create red centered rectangle. */
red_ = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
red_.backgroundColor = [UIColor redColor];
red_.autoresizingMask = …Run Code Online (Sandbox Code Playgroud)

1) 按钮后面没有表格 2) 表格已加载 3) 滚动后
如果我在 NSTableView 上放置一个按钮,我会在滚动后留下工件。有谁知道如何解决这一问题?
我目前的解决方案只是将带有表格的部分分成2个部分。下部是后台禁用的按钮。

刚开始用Nim语言编程(到目前为止我真的很喜欢).作为一个学习练习,我正在编写一个小型矩阵库.我有更多代码,但我只会展示与此问题相关的部分.
type
Matrix*[T; nrows, ncols: static[int]] = array[0 .. (nrows * ncols - 1), T]
# Get the index in the flattened array corresponding
# to row r and column c in the matrix
proc index(mat: Matrix, r, c: int): int =
result = r * mat.ncols + c
# Return the element at r, c
proc `[]`(mat: Matrix, r, c: int): Matrix.T =
result = mat[mat.index(r, c)]
# Set the element at r, c
proc `[]=`(mat: var Matrix, r, …Run Code Online (Sandbox Code Playgroud) 我在Nim(版本0.10.2)中传递数学函数(procs)时遇到问题.
import math
var s1 = @[1.1, 1.2, 1.3, 1.4]
var s2 = map(s1, math.sqrt)
Run Code Online (Sandbox Code Playgroud)
我收到了错误
Error: 'sqrt' cannot be passed to a procvar
Run Code Online (Sandbox Code Playgroud)
如果我为sqrt编写一个包装器函数,它就可以正常工作.
proc fxn(x: float): float = math.sqrt(x)
var s2 = map(s1, fxn)
Run Code Online (Sandbox Code Playgroud)
我使用平方根和map作为示例,但最终我将sqrt(和其他数学过程)传递给另一个proc.有没有办法在不编写包装函数的情况下执行此操作?
编译Nim程序nim c -r example.nim创建输出文件example.我想在另一个文件夹中创建一个输出文件,其名称bin/example.o更容易gitignore.
到目前为止我尝试过的:
nim c -r example.nim -o:bin/example.o
nim c -r example.nim --out:bin/example.o
nim c -r example.nim -o:example.o
nim c -r example.nim --out:example.o
Run Code Online (Sandbox Code Playgroud)
所有这些尝试的结果与我省略-o/--out选项的结果example相同,从而导致与文件位于同一文件夹中的可执行example.nim文件.如果我没有传递选项,编译器甚至不接受该选项-r(这让我觉得我误解了该选项的目的).
我正在使用从github devel分支源安装和编译的Nim 0.10.3 .
什么编译器选项允许我修改编译的输出文件?
寻找一种使用Nim编程语言(版本0.11.2)从tar.gz存档读取文件的方法.说我有一个档案
/my/path/to/archive.tar.gz
Run Code Online (Sandbox Code Playgroud)
和该档案中的文件
my/path/to/archive/file.txt
Run Code Online (Sandbox Code Playgroud)
我的目标是能够在Nim中逐行读取文件的内容.在Python中,我可以使用tarfile模块执行此操作.在Nim中有libzip和zlib模块,但文档很少,没有示例.还有zipfiles模块,但我不确定它是否能够使用tar.gz档案.
我正在尝试学习 Nim 及其功能,例如迭代器;我发现下面的例子工作正常。
for i in countup(1,10): # Or its equivalent 'for i in 1..10:'
echo($i)
Run Code Online (Sandbox Code Playgroud)
但是,以下不起作用:
var
counter = countup(1,10) # THIS DO NOT WORK !
# counter = 1..10 # This works
for i in counter :
echo($i)
Run Code Online (Sandbox Code Playgroud)
Nim 编译器报告以下错误:
错误:试图调用未声明的例程:'countup'
countup 如何是未声明的例程,它是一个内置的迭代器!?
或者这是一个要报告的错误?
在变量声明中强制使用自定义迭代器的解决方案是什么,例如 countup 或 countdown ?
注意:我在 Windows 平台上使用 Nim 0.13.0。
我正在使用 Firebase Firestore 文档在地图上发布用户的位置,以便他们能够看到彼此。当它们都具有良好的连接时,这种方法工作正常,但有时它们的移动设备无法连接到 Firebase 服务器,并且写入似乎已被缓存:每当它们恢复连接时,所有待处理的位置写入都会批量发送。
对于其他用户来说,效果是他们看到一个人的位置停下来,过了一会儿他们开始快速移动,直到地图位置捕捉到真实值。这很烦人并且浪费带宽。
我尝试禁用持久性缓存,但这没有帮助(只有当发射器应用程序死亡时才会有帮助,但只要它存在,位置就会缓存在内存中)。
也许问题是我不应该为此目的使用文档,并且还有另一种 Firebase 机制允许丢弃陈旧的写入数据以进行实时通信?
我有以下 Nim+official libsdl2包装器代码
import sdl2
discard sdl2.init(INIT_EVERYTHING)
let
window = createWindow("Tic-Tac-Toe", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 600, 390, SDL_WINDOW_SHOWN)
renderer = createRenderer(window, -1, Renderer_Accelerated or Renderer_PresentVsync or Renderer_TargetTexture)
proc loadImage(file: string): TexturePtr =
let loadedImage = loadBMP(file)
let texture = createTextureFromSurface(renderer, loadedImage)
freeSurface(loadedImage)
return texture
proc applySurface(x: cint, y: cint, tex: TexturePtr, rend: RendererPtr) =
var pos: Rect
pos.x = x
pos.y = y
queryTexture(tex, nil, nil, pos.w, pos.h)
copy(rend, tex, nil, pos)
let
background = loadImage("resources/bg.bmp")
clear(renderer)
applySurface(0, 0, background, …Run Code Online (Sandbox Code Playgroud) 我开始为应用程序解码/编码视频,似乎BigFlake 的网站是工作视频代码的权威参考。我已将ExtractMpegFramesTest_egl14.java复制到我的项目中,并将其修改为使用不同的文件路径,但仅此而已。它从我复制到设备中的预先录制的视频中正确提取帧。然而,当尝试将它与从设备相机录制的视频一起使用时,我得到的帧只是水平线:
在测试了不同录制的视频后,我意识到问题来自旋转视频。该设备的摄像头对来自帧缓冲区的帧进行编码,然后在视频上添加旋转标签。这可以从对象中提取MediaFormat:
int rotation = format.getInteger("rotation-degrees");
Run Code Online (Sandbox Code Playgroud)
不幸的是,交换已保存图像的宽度/高度不会改变任何内容,图像仍然会损坏。必须对保存代码执行哪些操作才能正确处理旋转帧?