UIView有属性frame,bounds,center,和origin,他们都似乎是相互关联的.大多数时候,我frame在设置a的位置和大小时处理UIView.据我所知,这frame是使用全局坐标系并bounds使用局部视图的坐标(因此它的x和y为0,但并非总是如此),但是在使用什么时我仍然会感到困惑.
在什么情况下(和什么是正确的时间)的其他属性(bounds,center,origin)应使用?
有人可以向我解释一个UIScrollView实例中的contentInset属性用于什么?也许提供一个例子?
A UIView有一个CALayer.这很确定.但两者似乎都提供了同样的东西.
如果我设置clipsToBounds=YES,这还会设置图层masksToBounds=YES吗?为什么不同名字?有谁知道?
如何仅在水平而非垂直方向上将其父视图中的任何子视图居中.我尝试了child.center = parent.center但它将我的子视图水平和垂直放置在父视图的中心.我怎样才能将它在中心水平对齐.谢谢
使用Google Maps for iOS SDK,"我的位置"按钮默认位于右下角:

我想将它放在左下角(是的,我意识到我需要注意不要遮挡那里的"Google"徽标).我不相信SDK有"官方"方式这样做,但根据这个答案我已经想出如何抓住我的位置按钮子视图,以便我可以定位它.
让我感到困惑的部分是我应该给"我的位置"视图的框架和/或边界提供的值,以便将它放在我想要的位置.首先,当前的"我的位置"按钮有frame.origin.x= -74和frame.origin.y= -54.这是我第一次看到a frame.origin.x或a的负坐标frame.origin.y,我甚至不确定iOS如何处理负坐标.我的第一个想法是,例如frame.origin.x = -74相当于[view superview].frame.size.width - 74,即从超视图的宽度或高度中减去负值.但后来我看了superview的宽度和高度,他们都是0.0.这是我的代码,它输出有关地图和我的位置按钮框架和边界的一些信息:
- (void)loadView {
GMSCameraPosition *cam = [GMSCameraPosition cameraWithLatitude:jcuTownsvilleCenterCampusLat longitude:jcuTownsvilleCenterCampusLon zoom:17];
self.campusMap = [GMSMapView mapWithFrame:CGRectZero camera:cam];
self.campusMap.myLocationEnabled = YES;
self.campusMap.settings.myLocationButton = YES;
self.view = self.campusMap;
for (UIView *view in self.campusMap.subviews) {
NSLog(@"view.description: %@",view.description);
if ([view isKindOfClass:[UIButton class]]) {
// these four values in the conditional below are just what …Run Code Online (Sandbox Code Playgroud) 我如何获得我正在控制的视图或子视图的实际尺寸?例如:
UIView *firstView = [[UIView alloc] initWithFrame:CGRectMake(0,0,200,100)];
[self addSubview:firstView];
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 20, 230, 120)];
[firstView addSubview:button];
Run Code Online (Sandbox Code Playgroud)
如您所见,我的button对象超出了添加到的视图的尺寸.
这是心灵(假设有许多对象被添加为子视图),我如何确定实际的宽度和高度firstView?
我有一个视图控制器,其中包含导航栏,表格视图和工具栏.我在视图控制器中包含了UITableViewDelegate,并通过故事板正确地分配了表的数据源并委托给视图控制器.表格视图从远程数据库加载其数据,一旦表格滚动到最后一个单元格,更多数据将加载到表格中.我通过使用scrollViewDidScroll和indexPathForRowAtPoint方法实现了这一点,如下文所述:如何知道UITableView何时在iPhone中滚动到底部.但是,当我运行应用程序并滚动表时,indexPathForRowAtPoint返回的唯一索引路径是表加载时指定点的路径.这是我滚动时得到的代码和输出:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGPoint bottomPoint = CGPointMake(160, 430);
CGPoint topPoint = CGPointMake(160, 10);
NSLog(@"%d", [[_tableView indexPathForRowAtPoint:bottomPoint] row]);
}
Run Code Online (Sandbox Code Playgroud)
每次我滚动以下输出:
2013-06-08 00:56:45.006 Coffee[24493:907] 3
2013-06-08 00:56:45.012 Coffee[24493:907] 3
2013-06-08 00:56:45.040 Coffee[24493:907] 3
2013-06-08 00:56:45.069 Coffee[24493:907] 3
2013-06-08 00:56:45.088 Coffee[24493:907] 3
2013-06-08 00:56:45.105 Coffee[24493:907] 3
2013-06-08 00:56:45.135 Coffee[24493:907] 3
2013-06-08 00:56:45.144 Coffee[24493:907] 3
2013-06-08 00:56:45.173 Coffee[24493:907] 3
2013-06-08 00:56:45.180 Coffee[24493:907] 3
Run Code Online (Sandbox Code Playgroud)
其中3是单元格的indexPath.row,当控制器加载时,底点开启.我做错了什么,为什么会这样?是否与UITableView位于父视图控制器内的事实有关?
我正在尝试360度旋转视角,但倾斜度为45度.
像这样

我无法想办法做到这一点.
到目前为止,我已经成功了
CABasicAnimation* animation = [CABasicAnimation
animationWithKeyPath:@"transform.rotation.y"];
animation.fromValue = @(0);
animation.toValue = @(2 * M_PI);
animation.duration = 1;
[self.layer addAnimation:animation forKey:@"rotation"];
Run Code Online (Sandbox Code Playgroud)
它在y轴上旋转,但我想要的是这个Y轴在旋转之前倾斜45度.
ios ×7
uiview ×4
cocoa-touch ×2
objective-c ×2
uikit ×2
addsubview ×1
animation ×1
bounds ×1
calayer ×1
cocoa ×1
frame ×1
iphone ×1
rotation ×1
transform ×1
uiscrollview ×1
uitableview ×1
uitextfield ×1