以下问题是这个问题的延续:
主要思想是每个视图都应该声明它是"首选"(内在)大小,以便AutoLayout可以知道如何正确显示它.UILabel只是一个视图无法知道显示所需大小的情况的示例.这取决于提供的宽度.
正如mwhuss指出的那样,setPreferredMaxLayoutWidth实现了使标签跨越多行的技巧.但这不是主要问题.问题是我在何时何地获得此宽度值作为参数发送到setPreferredMaxLayoutWidth.
我设法制作看似合法的东西,所以如果我错了,请纠正我,如果你知道更好的方法,请告诉我.
在UIView的
-(CGSize) intrinsicContentSize
Run Code Online (Sandbox Code Playgroud)
我setPreferredMaxLayoutWidth根据self.frame.width我UILabels.
UIViewController的
-(void) viewDidLayoutSubviews
Run Code Online (Sandbox Code Playgroud)
是我知道的第一个回调方法,主视图的子视图是用它们在屏幕上居住的确切帧来指定的.然后,从该方法I内部操作我的子视图,使其内在大小无效,以便UILabel根据指定给他们的宽度分成多行.
我有两个严格并排连接的摄像机,朝向平行方向.
当我triangulatePoints
对相应点的两个向量执行时,我得到了3D空间中的点集合.3D空间中的所有点都具有负Z坐标.
所以,要深究这个......
我的假设是OpenCV使用右手坐标系.
我假设每个摄像机的初始方向指向正Z轴方向.
因此,通过使用像我在开头提出的那些投影矩阵,我会假设摄像机位于空间中,如下所示:
这个假设与我观察到的负数Z corrdinates的交错点时的观察结果相冲突.我能想到的唯一解释是OpenCV实际上使用左手坐标系.因此,对于我在开头所述的投影矩阵,这就是摄像机在太空中的定位方式:
这表明我的左侧相机在这种情况下不在左侧.这就是为什么我得分为负的深度.
而且,如果我尝试triangulatePoints
与solvePnP
我结合遇到问题.
我使用输出triangulatePoints
作为输入solvePnP
.我希望相机坐标靠近3D坐标系的原点.我希望计算出的相机位置与开头使用的投影矩阵相匹配.但这不会发生.我得到了一些完全狂野的结果,错过了预期值超过基线长度的10倍.
此示例比上述内容更完整地表示问题.
以下是生成这些点的代码.
移动,设置相机A和相机D ...
Mat cameraMatrix = (Mat_<double>(3, 3) <<
716.731, 0, 660.749,
0, 716.731, 360.754,
0, 0, 1);
Mat distCoeffs = (Mat_<double>(5, 1) << 0, 0, 0, 0, 0);
Mat rotation_a = Mat::eye(3, 3, CV_64F); // no rotation
Mat …
Run Code Online (Sandbox Code Playgroud) 在someViewController中:
UIImagePickerController* picker = [[UIImagePickerController alloc] init];
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.delegate = self;
[self presentViewController:picker animated:YES completion:^{
}];
Run Code Online (Sandbox Code Playgroud)
我拍了一张照片然后到了下一个屏幕(由于allowEditing = YES;)我可以选择将照片剪裁成方形.白色方形矩形出现在我拍摄的照片上的初始位置,我尝试移动它.我可以拖动它,但每次我松开手指,它都会回到它最初所持的位置.没有毛刺.当我松开手指时,白色框架矩形动画与easeOut动画回到我拖动它的位置.
它与allowEditing设置为NO不同.如果设置为NO,则甚至不会出现裁剪矩形.
以前,我认为问题只出现在iOS 7上,但现在我意识到它发生在所有iOS版本上.我不明白这是怎么发生的,但是当我开始使用Xcode 5并构建iOS7时就开始了.我在我的Mac上保留了Xcode 4.6.3,所以我尝试用旧的Xcode再次构建这个应用程序,但它没有修复任何东西.
我还需要提一下,当我从照片库加载图像时,裁剪工作正常,就像它应该的那样.我拍摄新照片时遇到问题.
此外,当出现初始裁剪矩形时,虽然我无法在照片周围拖动该矩形,但我仍然可以放大和缩小.当我放大时,我可以在照片周围拖动这个(较小的)裁剪矩形,但只能在初始矩形的位置和大小的边界内.如果我越过那个边界,我的裁剪矩形会动画回到不可见边界的内部.
有人,请帮忙......
在iOS 7.我有导航控制器,我在堆栈顶部推送一个新的VC.
新的VC有一个UIScrollView,它填充VC的根视图并垂直滚动.如果我向下滚动一点点,然后尝试使用"刷卡回去" /"刷卡流行"的姿态,垂直滚动查看第一滚动到顶部,然后interactivePopGesture承认,我可以拖上顶VC向左和向右堆叠.
为什么会这样?我希望防止我的滚动视图在识别"滑动返回"手势之前自动滚动到顶部.我该怎么做呢?
更新#1:
当我创建一个新的xcode项目时,我似乎无法重现这个错误,所以在原始项目中我肯定是错误的.当我找到原因时会更新.
更新#2:
当识别interactivePopGesture时,setContentOffset
在我的垂直滚动视图上调用方法.在调试时,我看到setContentOffset
是从中调用的UIScrollViewInternal _adjustContentOffsetIfNecessary
.
更新#3:
在以下场景中会出现同样的问题:我在垂直UIScrollView中有UITextFields.按下某个UITextField时,会出现一个键盘.当我想以交互方式关闭键盘时(通过在键盘上滚动滚动视图),在我释放拖动后,会出现故障.UIScrollView的内容偏移暂时设置为零,然后设置回原始内容偏移并继续动画.这个不需要的设置contentOffset
也被调用UIScrollViewInternal _adjustContentOffsetIfNecessary
.
我继续使用我自己的UIScrollView子类在两个场景中替换了UIScrollView.在该子类中,我将私有方法重写-(void) _adjustContentOffsetIfNecessary
为空void方法.我的两个问题都被消除了,我找不到任何负面后果.这不是一个解决方案,我不会使用这种方法,因为我不知道我到底做了什么.
我正在使用OpenCV的triangulatePoints
功能来确定由立体相机成像的点的3D坐标.
我正在经历这个功能根据相机到该点的角度给出了不同距离到同一点.
这是一段视频:https: //www.youtube.com/watch?v = FrYBhLJGiE4
在此视频中,我们正在跟踪"X"标记.在左上角显示有关正在跟踪的点的信息.(Youtube降低了质量,视频通常更清晰.(2x1280)x 720)
在视频中,左侧相机是3D坐标系的原点,它正向Z方向看.左相机正在进行一些翻译,但几乎没有triangulatePoints
功能导致相信.(更多信息在视频说明中.)
公制单位为mm,因此该点最初在距离左相机约1.94m处进行三角测量.
我知道不够精确的校准会导致这种行为.我使用棋盘图案运行了三次独立校准.由此产生的参数因我的口味而变化太大.(焦距估计约为±10%).
如您所见,视频没有严重失真.直线在任何地方看起来都非常直.因此,最佳摄像机参数必须接近我已经使用的参数.
我的问题是,还有什么能够导致这种情况吗?
两个立体相机之间的会聚角度可以产生这种效果吗?或错误的基线长度?
当然,特征检测总是存在错误.由于我使用光流来跟踪'X'标记,我得到亚像素精度,这可能会被误解......我不知道...... + -0.2 px?
我正在使用Stereolabs ZED立体相机.我不是直接使用OpenCV访问视频帧.相反,我必须使用购买相机时获得的特殊SDK.我发现这个我正在使用的SDK 可能正在做一些不成比例的事情.
所以,现在我想知道......如果SDK使用不正确的失真系数来解决图像,那么这可以创建既不是桶形失真也不是枕形失真但完全不同的图像?
我是单元测试的新手,并且有一个简单的用例。
有 2 种模型:City、Resident。一个城市有很多居民。
我创建了 2 个固定装置 yml 文件:cities.yml、residents.yml。
居民.yml
resident1:
name: resident1
resident2:
name: resident2
resident3:
name: resident3
Run Code Online (Sandbox Code Playgroud)
城市.yml
city1:
name: city1
residents: resident1, resident2, resident3
Run Code Online (Sandbox Code Playgroud)
当我运行一个应该总是通过的简单测试时,我收到一个错误:
Minitest::UnexpectedError: ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'residents' in 'field list': INSERT INTO `cities` (`name`, `residents`, `created_at`, `updated_at`, `id`) VALUES ('city1', 'resident1, resident2, resident3', '2014-06-09 20:42:22', '2014-06-09 20:42:22', 574963714)
Run Code Online (Sandbox Code Playgroud)
我期望的是拥有一个带有 property 的 City 模型实例name: 'city1'
,以及一个residents
包含 3 个 Resident 模型实例的数组的 property 。
在 …
在iOS 7 textField.adjustsFontSizeToFitWidth = YES
上无效。minimumFontSize
也已正确设置。我希望如果文本太长而无法放入textField的框架中,字体大小将减小。但是,实际上发生的是文本被剪切,并且在末尾附加了“ ...”。
我试过了:
有任何想法吗?
编辑:
代码有点复杂,但是这里是:
self.captionView = [[CaptionView alloc] initWithFrame:CGRectMake(0, 0, self.width, 50)];
self.captionView.textField.font = [self.captionView.textField.font fontWithSize:20.f];
self.captionView.textField.leftPadding = 2.f;
self.captionView.textField.rightPadding = 2.f;
self.captionView.textField.adjustsFontSizeToFitWidth = YES;
self.captionView.textField.minimumFontSize = 2.f;
self.captionView.captionViewDelegate = self;
[self addSubview:self.captionView];
Run Code Online (Sandbox Code Playgroud)
CaptionView
具有属性textField,它是的子类UITextField
。
该子类覆盖方法:
- (void)drawRect:(CGRect)rect;
- (void) drawPlaceholderInRect:(CGRect)rect;
- (CGRect) editingRectForBounds: (CGRect) bounds;
- (CGRect) textRectForBounds: (CGRect) bounds;
Run Code Online (Sandbox Code Playgroud)
编辑:
我只是注释掉了每个替代项,字体仍然没有很好地调整。
编辑:
我发现的最相似的问题在这里。公认的答案是放弃使用adjustsFontSizeToFitWidth
。
对于以下代码,这里有一些上下文.
Mat img0; // 1280x960 grayscale
Run Code Online (Sandbox Code Playgroud)
-
timer.start();
for (int i = 0; i < img0.rows; i++)
{
vector<double> v;
uchar* p = img0.ptr<uchar>(i);
for (int j = 0; j < img0.cols; ++j)
{
v.push_back(p[j]);
}
}
cout << "Single thread " << timer.end() << endl;
Run Code Online (Sandbox Code Playgroud)
和
timer.start();
concurrency::parallel_for(0, img0.rows, [&img0](int i) {
vector<double> v;
uchar* p = img0.ptr<uchar>(i);
for (int j = 0; j < img0.cols; ++j)
{
v.push_back(p[j]);
}
});
cout << "Multi thread " << timer.end() << …
Run Code Online (Sandbox Code Playgroud) #include <iostream>
using namespace std;
int main()
{
cout << -0.152454345 << " " << -0.7545 << endl;
cout << 0.15243 << " " << 0.9154878774 << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
-0.152454 -0.7545
0.15243 0.915488
Run Code Online (Sandbox Code Playgroud)
我希望输出看起来像这样:
-0.152454 -0.754500
0.152430 0.915488
Run Code Online (Sandbox Code Playgroud)
我的解决方案:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout << fixed << setprecision(6) << setw(9) << setfill(' ') << -0.152454345 << " ";
cout << fixed << setprecision(6) << setw(9) << setfill(' ') << -0.7545 << endl;
cout …
Run Code Online (Sandbox Code Playgroud) 无论我是使用MPMoviePlayerController
还是AVPlayer
(AVFoundation
),iOS都不允许设备在视频播放时自动锁定(进入睡眠模式).
我有一个案例,在后台的循环中不断播放极慢的视频.在播放此视频时,设备永远不会进入睡眠状态.
到目前为止,我唯一的选择是检测用户暂时不做任何操作然后暂停视频.之后,设备会倒计时在iOS设置中指定的"自动锁定"持续时间.
我正在寻找替代方案,AVPlayer
这将使这成为可能.
类似的问题:
是否可以设置AVPlayer以允许设备在视频播放期间进入休眠状态?
如何在MPMoviePlayer播放期间启用iPhone自动锁定?
我有一个想法在内部使用HTML5视频UIWebView
,但iOS不允许自动播放.
c++ ×4
ios ×4
opencv ×3
ios7 ×2
auto-lock ×1
autolayout ×1
avplayer ×1
cout ×1
fixtures ×1
formatting ×1
testing ×1
uilabel ×1
uiscrollview ×1
uitextfield ×1
video ×1