我正在Swift中使用CIFilter CIColorControls来更改相机输入,但是找不到任何设置可以使图像不受影响。我正在尝试通过调整UISliders来校准CIColorControls中的饱和度,亮度和对比度参数。
该文档指出inputSaturation和inputContrast的默认值为1.0。inputBrightness不声明输入值,但是在调整这些值时,我找不到从该设置开始显示不受所有这三个设置影响的图像的设置,这使我怀疑此过滤器根本存在问题。
我正在通过applyFilter传递未更改的CIImage:
image = image
.applyingFilter("CIColorControls", parameters: [kCIInputImageKey: image,
kCIInputSaturationKey:debugSatVal,
kCIInputBrightnessKey:debugBrightVal,
kCIInputContrastKey:debugConVal])
Run Code Online (Sandbox Code Playgroud)
debugSatVal,debugBrightVal和debugConVal由UISliders控制,我可以在LLDB中观察它们的值。
我正在使用Xcode 10.1.即使在我的目标的构建设置中使用搜索功能,我找不到"金属编译器"或任何相关的金属.
这里描述的金属设置可以在Build Settings中设置,但我找不到任何东西:https://developer.apple.com/documentation/coreimage/cikernel/2880194-init
它被切掉或更换了吗?
我必须检查UIWebView的缩放级别.并将其最高级别设置为特定级别.我试过这段代码但没有成功
编辑的帖子包括代码格式
UIScrollView *sRouteView = [[testWebView subviews] objectAtIndex:0];
sRouteView.delegate = self;
sRouteView.minimumZoomScale = 1.0;
sRouteView.maximumZoomScale = 2.0;
sRouteView.zoomScale = sRouteView.minimumZoomScale;
Run Code Online (Sandbox Code Playgroud)
我无法设置UIWebView的最大缩放级别
我在一个弹出窗口中点击了“取消”,该弹出窗口要求对我制作的应用程序中的照片库进行许可。这来自我没有制作的东西,而是来自操作系统。
现在,如果用户再次尝试点击照片库按钮,我需要回退。授权状态为拒绝。我通过这种方式检查证明:
let status = PHPhotoLibrary.authorizationStatus()
switch status {
case .authorized:
print("authorized")
case .denied:
print("denied") // it is denied
case .notDetermined:
print("notDetermined")
case .restricted:
print("restricted")
}
Run Code Online (Sandbox Code Playgroud)
如何再次显示一个弹出窗口,要求获得照片库的许可?我到处找,找不到任何有用的东西。
我希望它是这样的,但 PHPhotoLibrary 没有成员“requestAccess”:
PHPhotoLibrary.requestAccess(for: ???) { response in
if response {
//access granted
} else {
}
}
Run Code Online (Sandbox Code Playgroud) 我一直在使用以下方法来检测触摸何时开始以及位置是什么:
-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{
CGPoint touchLocation = [touch locationInView: [touch view]];
touchLocation = [[CCDirector sharedDirector] convertToGL:touchLocation];
touchLocation = [self convertToNodeSpace:touchLocation];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
但我还想知道如果我的手指仍然在屏幕上,我可以随时获取当前位置.谁知道怎么样?谢谢.
编辑
我会稍微发布这个作为答案,但这就是我所做的:
我只是在我所有方法之外定义的ccTime方法中转换变量:
- (void)update:(ccTime)dt {
heroMoveEndLoc = [self convertToNodeSpace:heroMoveEndLoc];
}
Run Code Online (Sandbox Code Playgroud) 我在cocos2D中使用一个调用方法并将BOOL作为参数传递的动作.
我收到警告:"传递参数3'actionWithTarget:selector:data:'使用此行生成没有强制转换的整数的指针":
id actionCharacterReaction = [CCCallFuncND actionWithTarget:self selector:@selector(characterReaction : data:) data:flipChar];
Run Code Online (Sandbox Code Playgroud)
我试过了:
id actionCharacterReaction = [CCCallFuncND actionWithTarget:self selector:@selector(characterReaction : data:) data:(BOOL)flipChar];
Run Code Online (Sandbox Code Playgroud)
我的方法看起来像这样:
-(void) characterReaction:(id)sender data:(BOOL)flipChar {
*code stuff inside*
}
Run Code Online (Sandbox Code Playgroud)
它似乎仍然很好.我对这个警告感到恼火.有任何想法吗?
我希望能够使用NSString
或类似的东西来存储字符串数组,但是通过键访问它们(我认为这就是它的名称),而不是数字索引.
例如,而不是这样做:
return names[3];
Run Code Online (Sandbox Code Playgroud)
做这样的事情:
return names["Bob"];
Run Code Online (Sandbox Code Playgroud)
你如何存储和检索这样的值?
请原谅我对此缺乏了解.我已经使用Objective C大约一年了,但从来没有做过这样的事情.
使用动作调用方法的适当方法是什么,以及传递CGPoint参数的方法本身应该是什么样的?我试图在网上查找没有太多运气的例子,所以我一直在猜测.
我试过的就是这个叫它:
CGPoint spriteCoord = saveStation.sprite.position;
id a1=[CCMoveTo actionWithDuration:.4 position:ccp(saveStation.sprite.position.x,saveStation.sprite.position.y)];
id actionSaveStationReaction = [CCCallFuncND actionWithTarget:self selector:@selector(saveStationReaction : data:) data:&spriteCoord];
[hero.heroSprite runAction:[CCSequence actions:a1, actionSaveStationReaction, nil]];
Run Code Online (Sandbox Code Playgroud)
方法本身:
-(void) saveStationReaction:(id)sender data:(void *)data {
CGPoint spriteCoord = (void *)data; //error: Invalid initializer
NSLog(@"spriteCoord x = %f", spriteCoord.x);
NSLog(@"spriteCoord y = %f", spriteCoord.y);
}
Run Code Online (Sandbox Code Playgroud) 在视图为比例设置动画之前,我希望在没有动画的情况下旋转视图。如果我之后有动画,我现在拥有它的方式会忽略我的初始视图旋转。
label.transform = CGAffineTransform(rotationAngle: CGFloat(90.0 * .pi / 180))
animateLabel(label:label)
func animateLabel(label:UILabel) {
label.transform = CGAffineTransform(scaleX: 0.6, y: 0.6)
UIView.animate(withDuration: 0.2, animations: {
label.transform = CGAffineTransform(scaleX: 1.1, y: 1.1)
},
completion: { _ in
UIView.animate(withDuration: 0.1) {
label.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
}
})
}
Run Code Online (Sandbox Code Playgroud)
更新:我如何用马特的回答更新我的代码,以便它正确动画:
我首先将初始旋转设置为变换变量,然后在调用 animateLabel 时发送它:
var transforms: CGAffineTransform = .identity
transforms = transforms.concatenating(CGAffineTransform(rotationAngle: CGFloat(90.0 * .pi / 180)))
animateLabel(label:label, transforms:transforms)
Run Code Online (Sandbox Code Playgroud)
我连接比例并将变换设置为修改后的变换。然后我可以对实际动画使用缩放比例:
func animateLabel(label:UILabel, transforms:CGAffineTransform) {
transforms.concatenating(CGAffineTransform(scaleX: 0.6, y: 0.6))
label.transform = transforms
UIView.animate(withDuration: 0.2, …
Run Code Online (Sandbox Code Playgroud) 注意:这是iOS 13 beta,但也可能会在明天正式发布。
更新2:我将其替换为较大的缩略图,但仍然有问题。
更新:如果我非常精确地触摸滑块上的拇指,它似乎仍然可以连续控制。但是,为什么要更改此设置?如何使它像以前一样进行控制?
我向视图添加了滑动手势识别器:
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipeRight.direction = UISwipeGestureRecognizer.Direction.right
self.view.addGestureRecognizer(swipeRight)
Run Code Online (Sandbox Code Playgroud)
稍后,我将UISlider添加到同一视图:
let slider = UISlider()
let sliderLength:CGFloat = 175
slider.frame = CGRect(x:0,
y:CGFloat(customHeight) - 35,
width:sliderLength,
height:35)
slider.minimumValue = -1.2
slider.maximumValue = 0.6
slider.setValue(Float(snowSliderValAdder), animated: false)
slider.addTarget(self, action: #selector(self.updateSnowSliderValue(_:)), for: .valueChanged)
view.addSubview(slider)
Run Code Online (Sandbox Code Playgroud)
以前可以正常运行的东西现在在iOS 13中表现不佳。如果我将其缓慢移动,则可以移动滑块上的拇指,但是如果进行任何滑动动作,则滑块上的拇指会停止移动,并且手势为触发。我该如何阻止这种情况的发生?