我有一个UITableViewCell链接到一个对象,我需要告诉我单元格是否可见.从我已经完成的研究中,这意味着我需要以某种方式访问UITableView包含它的内容(从那里,有几种方法可以检查它是否可见).所以我想知道是否UITableViewCell有一个指针UITableView,或者是否还有其他方法从单元格获取指针?
我有一个UIView包含AVPlayer显示视频的内容.更改方向时,我需要更改视频的大小和位置.
我对调整图层大小没有经验,所以我在调整视频大小时遇到了问题.
我首先创建AVPlayer并将其播放器添加到我的videoHolderView的图层:
NSURL *videoURL = [NSURL fileURLWithPath:videoPath];
self.avPlayer = [AVPlayer playerWithURL:videoURL];
AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.avPlayer];
playerLayer.frame = videoHolderView.bounds;
playerLayer.videoGravity = AVLayerVideoGravityResizeAspect;
playerLayer.needsDisplayOnBoundsChange = YES;
[videoHolderView.layer addSublayer:playerLayer];
videoHolderView.layer.needsDisplayOnBoundsChange = YES;
Run Code Online (Sandbox Code Playgroud)
然后,稍后,我将更改videoHolderView框架的大小和位置:
[videoHolderView setFrame:CGRectMake(0, 0, 768, 502)];
Run Code Online (Sandbox Code Playgroud)
此时,我需要avPlayer调整大小到这些相同的维度.这不会自动发生 - avPlayer在videoHolderView中保持小尺寸.
如果有人可以提供帮助,我真的很感激任何建议.
多谢你们.
好吧,所以这里的关键是我根本不使用IB,因为我正在使用的View是以编程方式创建的.该UIView覆盖下半部分的屏幕,并有一堆上的按钮.但是,我想添加更多按钮UIView,而不是更大.为此,我想UIScrollView在视图内部进行操作,这将允许我在屏幕上添加更多按钮,以便用户可以滚动到它们.我认为这是它的工作原理.
self.manaView = [[[UIView alloc] initWithFrame:frame] autorelease];
self.manaView.backgroundColor = [UIColor purpleColor];
UIScrollView *scroll = [UIScrollView alloc];
scroll.contentSize = CGSizeMake(320, 400);
scroll.showsHorizontalScrollIndicator = YES;
[self.manaView addSubview:scroll];
Run Code Online (Sandbox Code Playgroud)
代码的第一部分引用了我的UIView,它工作得很好,但我无法弄清楚如何以UIScrollView编程方式进行并将其添加到视图中,然后向其添加按钮.
UIButton *ret2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
ret2.tag = 102;
ret2.frame = CGRectMake(255, 5, 60, 50);
[ret2 setTitle:@"Return" forState:UIControlStateNormal];
[ret2 addTarget:self action:@selector(flipAction:) forControlEvents:UIControlEventTouchUpInside];
[scroll addSubview:ret2];
Run Code Online (Sandbox Code Playgroud)
当我这样做时,按钮就会从屏幕上消失.那么我该怎么做呢?谢谢您的帮助!
我有两个视图控制器(BuildingsViewController和RoomsViewController),它们都使用名为upload的App Delegate中的一个函数.upload函数基本上执行HTTP请求,如果成功或不成功,则触发uialertview.这工作正常.
我正在努力的部分来自app delegate的connectionDidFinishLoading方法.我需要能够通过viewWillAppear该视图控制器的方法基本上刷新当前视图控制器.在viewWillAppear每个视图控制器的功能内部,我有代码,用于确定底部工具栏上的按钮.
我希望通过app delegate完成上传时,每个视图控制器工具栏中的"上传"按钮会自动删除.
我试过在app委托[viewController viewWillAppear:YES]的connectionDidFinishLoading方法中做,但它永远不会被调用.
我希望我足够清楚.任何帮助是极大的赞赏.
谢谢.
我正在调整一个详细视图控制器的状态,就在它按下之前navigationController:
[self.detailViewController detailsForObject:someObject];
[self.navigationController pushViewController:self.detailViewController
animated:YES];
Run Code Online (Sandbox Code Playgroud)
在DetailViewController一个scrollView驻留.我根据传递的对象调整了哪些内容:
- (void)detailsForObject:(id)someObject {
// set some textView's content here
self.contentView.frame = <rect with new calculated size>;
self.scrollView.contentSize = self.contentView.frame.size;
self.scrollView.contentOffset = CGPointZero;
}
Run Code Online (Sandbox Code Playgroud)
现在,这一切都有效,但scrollView会contentOffset在navigationController的滑入式动画中调整它.在contentOffset将被设置为最后contentSize和新计算之间的差异.这意味着第二次打开detailsView时,详细信息将滚动到某个不需要的位置.即使我设置contentOffset来CGPointZero明确.
我发现,重新contentOffset在- viewWillAppear没有任何效果.我能想到的最好的方法是重置contentOffset viewDidAppear,导致内容明显上下移动:
- (void)viewDidAppear:(BOOL)animated {
self.scrollView.contentOffset = CGPointZero;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法防止UIScrollView它contentOffset在contentSize改变时调整它?
时间分析器显示我的应用程序中最耗时的操作是UITableViewCells从nib文件加载.其中最昂贵的是加载UITableViewCell4KB图像.
我UITableViewCell使用以下代码从nib 加载:
[[NSBundle mainBundle] loadNibNamed:@"UITableViewCellPortrait" owner:self options:NULL];
cell = portraitCell;
self.portraitCell = nil;
Run Code Online (Sandbox Code Playgroud)
有没有人比较过以编程方式创建视图或UITableViewCell从笔尖加载a之间的区别?
编辑:
我比较了UITableViewCell从笔尖重复加载和以编程方式创建视图的时间曲线.我的测试包括UITableViews在3-5秒的时间内交替两次约10次.在每个测试中,以UITableViewCell编程方式加载速度要快得多,速度提高2到6倍.
任何人都可以证实这些结果吗?
编辑:我更新了nib加载代码只加载nib文件一次,并使用缓存版本进行后续调用.
if (self.UITableViewPortaitNib == nil) {
self.UITableViewPortaitNib = [UINib nibWithNibName:@"UITableViewCellPortrait" bundle:[NSBundle mainBundle]];
}
self.UITableViewPortaitNib instantiateWithOwner:self options:NULL];
cell = portraitCell;
self.portraitCell = nil;
Run Code Online (Sandbox Code Playgroud)
我还使用自动化仪器来创建更一致的运行,结果仍然建议以UITableViewCells编程方式加载比加载UITableViewCells笔尖更快.UITableViewCells从笔尖加载的平均运行时间约为90 UITableViewCell毫秒,而以编程方式创建的平均运行时间为50毫秒.
[编辑:]问题已经解决.我没有正确链接我的代表UIBuilder.代码很好!
我想在键盘出现时调整scrollview的大小.我去了开发人员文档并找到了这些信息.
在左侧"管理键盘".
在文档中,它显示了一些代码来检测键盘的大小,然后调整大小UIScrollView.我NSLog在函数代码中放了一条消息,- (void)keyboardWasShown:(NSNotification*)aNotification所以我看到函数实际上被调用了,但是当我尝试NSLog使用kbSize.height时,它的值总是为0.
为什么苹果为此目的提供的代码不起作用?
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
// If active text field is hidden by keyboard, scroll it so it's visible
// Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) …Run Code Online (Sandbox Code Playgroud) 我有一个UIBarButtonItem自UITextField定义视图.工具栏包含此项目和几个按钮.
当工具栏调整大小(比如设备方向更改)时,我希望UITextField增长或缩小(宽度)以占用工具栏中的所有可用空间.
如果没有弄清楚工具栏中所有按钮的组合大小,然后UITextField适当地设置宽度,是否只有一些神奇的方法可以让这个项目像灵活空间条项目一样?
我的UIViewController模型组件在下载完内容后发出的通知寄存器.
下载可以在后台进行(通过使用beginBackgroundTaskWithExpirationHandler:),所以显然我不希望我的GUI尝试重绘等,如果下载在后台完成.
所以我想我有两个选择 - 1)模型知道它在后台/前景中的时间并且不会触发通知.2)UIViewController在后台通知的注销登记.
选项2)是更可取的.
UIViewController当应用程序进入后台时,总会调用一个方法吗?或者,UIViewController当应用程序进入后台时,是否必须注册才能收到通知事件?
(看起来像等viewWillDisappear,viewWillUnload当应用程序移动到后台时不会被调用?)
cancelAllOperations()不适用于mainQueue(该cancel()方法未在该NSOperation对象上调用).我错过了什么吗?我必须遍历所有操作并调用cancel()方法才能使其工作.
ios ×8
iphone ×6
objective-c ×5
uiscrollview ×2
avplayer ×1
calayer ×1
cocoa-touch ×1
contentsize ×1
ipad ×1
keyboard ×1
tableview ×1
uikit ×1
uitoolbar ×1
uiview ×1
xcode ×1