我有一个UIButton从网络下载其图像,我希望内容模式是"方面填充",所以我这样做:
btn.imageView.contentMode = UIViewContentModeScaleAspectFill;
Run Code Online (Sandbox Code Playgroud)
然后我简单地打电话:
[btn setImage:image forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
这适用于比按钮大的图像.缩放它们以适应宽高比不变的按钮.但对于那些小于按钮的图像,它们只是在中心显示而不会被拉伸.
为了解决这个问题,我尝试使用我检索到的图像制作可调整大小的图像,然后调用setImage:forState:我的按钮,但这不起作用.
因此,我最终必须为每个小于我的按钮的图像手动绘制一个已调整大小的图像,然后使用我的按钮绘制的图像,但我不喜欢这个解决方案.
所以我的问题是如何在我的按钮上正确缩放较小的图像,而不必每次都手动绘制一个调整大小的图像?
我有一个视图作为另一个视图的子视图,然后我设置父视图的alpha值类似于0.5,但这也使得子视图即使其alpha值设置为1也是透明的.那么如何才能使子视图非-transparent(opaque)当其父视图的alpha值小于1?
我有一个自定义的UIView,它的行为是这样的:在我从nib加载它并将它添加到我的视图层次结构后,它首先几乎是透明的(alpha = 0.1),当我点击它时,它变得不透明(alpha = 1.0),一段时间后,它会自动变得几乎透明(alpha = 0.1).
自定义视图中的代码是这样的,它就像我上面描述的那样工作:
- (void)awakeFromNib {
[self setup];
}
- (void)setup {
self.alpha = 0.1f;
[self addGestureRecognizer:[[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(tapped:)]];
}
- (void)tapped:(UITapGestureRecognizer *)tapRecognizer {
if (self.alpha == 1.0) {
[self hideSelf];
} else {
[UIView animateWithDuration:0.5
animations:^{ self.alpha = 1.0f; }
completion:^(BOOL finished) {
[self.timer invalidate];
self.timer = nil;
self.timer = [NSTimer timerWithTimeInterval:3
target:self
selector:@selector(hideSelf)
userInfo:nil
repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:self.timer
forMode:NSDefaultRunLoopMode];
}];
}
}
- (void)hideSelf {
[UIView animateWithDuration:0.5
animations:^{ self.alpha = …Run Code Online (Sandbox Code Playgroud) 我有一个命令行应用程序A,在A我执行可执行脚本时B,B我期待来自stdin的输入.
我编写了一个演示,A使用Foundation's Processapi 在Swift中实现,发现B无论用什么语言实现,都无法从stdin获取用户输入.
码:
// `A`'s main.swift
import Foundation
let process = Process()
process.launchPath = PATH_TO_SCRIPT_B
process.launch()
process.waitUntilExit()
// `B`
#!/usr/bin/swift
print("intpu something")
let input = readLine()
print("input: \(input)")
Run Code Online (Sandbox Code Playgroud)
process根据文档,我没有设置输入:
如果未使用此方法,则标准输入将从创建接收器的进程继承.
更新:
A是使用Swift Package Manager创建的可执行包.我曾经swift package generate-xcodeproj生成一个Xcode项目文件.我确认如果我运行使用swift build或xcodebuild在shell中构建的可执行文件,则从stdin获取输入的问题B出现了.但是如果我直接在Xcode中运行它,通过command + R在Xcode中按下它,那么它可以工作.因此,如果我理解在shell和Xcode中运行可执行文件之间的区别,我可能会使一切正常.
说我有以下函数定义:
func doSomething() {
print("do something")
}
func doSomething() -> Int {
return 1
}
Run Code Online (Sandbox Code Playgroud)
如果要这样做,我想调用一个没有返回值的值:
doSomething()
Run Code Online (Sandbox Code Playgroud)
我得到了错误Ambiguous use of 'doSomething()'。
我必须这样做:
let _:Void = doSomething()
Run Code Online (Sandbox Code Playgroud)
使编译器满意,但这看起来并不优雅,那么如何优雅地做到这一点呢?