我正在创建一个带UIBezierPath绘图的自定义视图.我想根据服务器的响应状态更改时更新自定义视图填充颜色.我使用fillColor属性作为参数来更新视图的颜色.我怎样才能以fillcolor编程方式更改?
当我从我的按钮几次调用此函数时(比如疯了几次),然后我的应用程序崩溃而不是抛出异常而忽略.
当异常发生时你怎么忽略崩溃?
localView的位置UIView *localView.
- (void)smallLocalView {
@try {
self.localView.backgroundColor = [UIColor blackColor];
[self.localView.layer removeFromSuperlayer];
//self.localView.opaque = NO;
}
@catch(NSException *exp) {
//NSLog(@">>> failed %@" , exp.reason);
NSLog(@"OK - but dont crash!!!");
}
@finally {
NSLog(@"OK - but dont crash!!!");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我声明了一个名为var progressBar的UIView变量:UIView?
并使用此功能显示或隐藏视图
func showProgressBar(showBar: Bool){
if showBar{
let viewHeight = view.frame.size.height
progressBar = Bundle.main.loadNibNamed("progressBar", owner: nil, options: nil)?.first as? UIView
progressBar?.frame = CGRect(x: 0, y: viewHeight - 80 , width: self.view.frame.width, height: 80)
if let bar = progressBar{
self.view.addSubview(bar)
}
}else{
DispatchQueue.main.async() {
self.progressBar?.removeFromSuperview()
}
}
Run Code Online (Sandbox Code Playgroud)
有时当我在视图之间导航时,我无法隐藏进度条,即使self.progressBar?.removeFromSuperview()执行时也是如此.在我看来,如果视图已经丢失了对旧进度条的引用...你对这个问题以及如何解决这个问题有所了解吗?
我想在点击时完全删除对UIView的引用(它是一个子视图。
@IBAction private func handleTap(_ sender: UITapGestureRecognizer) {
if (delegate != nil) {
delegate?.imageWasTapped(imageView.image!, photoURL: photoURL!)
self.removeFromSuperview()
}
print ("tap")
}
Run Code Online (Sandbox Code Playgroud)
removeFromSuperview()似乎不足以完全删除实例(根据我的阅读),因此想
self = nil
Run Code Online (Sandbox Code Playgroud)
但是自我当然是一成不变的。
我试图将值作为inout参数传递给我的超级视图,但是self仍然是不变的。
delegate?.imageWasTapped(imageView.image!, photoURL: photoURL!, imageView: self)
Run Code Online (Sandbox Code Playgroud)
是否足以从内存中取消分配UIView的removeFromSumerview(),或如何做到最好?
我试图在下载其图像时在每个集合视图单元格中放置一个UIActivityIndicatorView.我把它出现在每个细胞中,但它拒绝自我中心.它停留在左上角.我怎样才能让它正确居中?
我是这样做的:
extension UIView {
func showActivityIndicator(onView: UIView, withIndicator: UIActivityIndicatorView) {
withIndicator.frame = CGRect(x: onView.frame.midX - 20, y: onView.frame.midY - 20, width: 40, height: 40)
withIndicator.activityIndicatorViewStyle = .whiteLarge
withIndicator.center = onView.center
onView.addSubview(withIndicator)
withIndicator.startAnimating()
}
}
Run Code Online (Sandbox Code Playgroud)
我在cellForItemAtIndexPath中调用该函数,如:
showActivityIndicator(onView: cell.contentView, withIndicator: activityInd)
Run Code Online (Sandbox Code Playgroud)
但我所做的一切都不会从左上角移动它.有什么建议?
我是新手使用AVPlayer for IOS swift并使其正常工作.但是我希望视频在UIView中播放,现在视频默认占用整个页面.我一直在尝试一些事情,这里没有任何作用是我的代码.我在该页面上有其他内容,这就是为什么我希望UIVIEW中的avplayer被称为newView,当我把下面的代码放到它时给我一个错误.我一直在UIView层中关注此示例AVPlayerLayer Position
import UIKit
import AVFoundation
import WebKit
import AVKit
class ExampleTable: UIViewController {
@IBOutlet weak var newView: UIView!
let avPlayerViewController = CustomAVPLayerC()
var playerView: AVPlayer?
var AVLayer: AVPlayerLayer?
override func viewDidAppear(_ animated: Bool) {
let movieURL:NSURL? = NSURL(string: "my url")
playerView = AVPlayer(url: movieURL! as URL)
avPlayerViewController.player = playerView
playerView?.isMuted = true
avPlayerViewController.view.frame = newView.frame
newView.addSubview(avPlayerViewController.view)
addChildViewController(avPlayerViewController)
self.present(self.avPlayerViewController, animated: true) {
self.avPlayerViewController.player?.play()
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
} …Run Code Online (Sandbox Code Playgroud) 我在自定义视图上创建了包含一个标签和按钮,我在UIView类中创建了两个插座
我有一个UIViewController,其中我有自定义视图现在我想要更改标签名称并希望在按钮单击时执行某些操作.
let commonView = UINib(nibName: "CommonView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! CommonView
firstView.addSubview(commonView)
commonView.lblCommon.text = "We can change label in particular Screen"
Run Code Online (Sandbox Code Playgroud)
我能够更改标签文本但是如何在UIViewcontroller中获取按钮操作事件?
我试图理解iOS编程中的任何歧义,所以我看过开发人员将其主视图分配给viewController的view属性的教程,如下所示:
let sceneView = ARSCNView(frame: self.view.frame)
view = sceneView
Run Code Online (Sandbox Code Playgroud)
但是我也看到开发人员将他们的主视图作为子视图添加到view属性,如下所示:
let sceneView = ARSCNView(frame: self.view.frame)
view.addSubView(sceneView)
Run Code Online (Sandbox Code Playgroud)
这两个过程是相同的还是不同的?
上面的是我的内心细胞。我想将此单元格加载到下面的单元格中。内部单元的数量是动态的。

上面的是我的主要单元格。红色部分是UIView。我想将一些innerCell动态地添加到UIView中。我尝试了以下代码
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let mainCell = tableView.dequeueReusableCell(withIdentifier: "FlightCellMain", for: indexPath) as? FlightCellMain
let innerCell = tableView.dequeueReusableCell(withIdentifier: "FlightCell", for: indexPath) as? FlightCell
mainCell?.flightCellView.addSubview(innerCell!)
mainCell?.backgroundColor = .clear
innerCell?.backgroundColor = .clear
// innerCell?.innerCellWidthConst.constant = (mainCell?.mainView.frame.width)!
self.showStopsView(2, self.airportlist, (innerCell?.leftRound)!, (innerCell?.rightRound)!, (innerCell?.centerLine)!, (innerCell?.routeView)!)
mainCell?.flightCellViewHieghtConst.constant = (mainCell?.flightCellViewHieghtConst.constant)! + 125
innerCell?.layoutIfNeeded()
mainCell?.layoutIfNeeded()
return mainCell!
}
Run Code Online (Sandbox Code Playgroud)
但是结果就是这样。我提供了自动布局。当我分别运行两个单元格时,它适合其内容。我在做什么错?
上面的图片是我试图实现的模型。航班数量详细信息是动态的。
ios ×10
uiview ×10
swift ×7
objective-c ×2
addsubview ×1
avplayer ×1
iphone ×1
memory ×1
swift3 ×1
uiimageview ×1
uitableview ×1