我正在尝试在网页上使用Segoe UI Light,Segoe UI Semilight和Segoe UI.它在IE中呈现出色,但Chrome似乎并没有区分Light和Semilight.
正如Microsoft建议的那样,我正在使用此StackOverflow答案中建议的CSS .
/*
Explicitly define a Segoe UI font-family so that we can assign Segoe UI
Semilight to an appropriate font-weight.
*/
@font-face {
font-family: "Segoe UI";
font-weight: 200;
src: local("Segoe UI Light");
}
@font-face {
font-family: "Segoe UI";
font-weight: 300;
src: local("Segoe UI Semilight");
}
@font-face {
font-family: "Segoe UI";
font-weight: 400;
src: local("Segoe UI");
}
@font-face {
font-family: "Segoe UI";
font-weight: 600;
src: local("Segoe UI Semibold");
}
@font-face {
font-family: …
Run Code Online (Sandbox Code Playgroud) 我是Flux/React的新手,我很难理解一些基本的架构决策:
不幸的是,我看到的所有例子似乎都太简单了,无法回答这些问题.让我们从Facebook的聊天应用示例开始吧.有多个线程,每个线程都有消息.MessageStore保存整个应用程序的所有消息,名为getAllForThread(id)的方法返回已过滤的消息子集.当消息进入任何线程时,它会发出更改通知,导致MessageSection react组件重新获取数据(无论用户正在查看哪个线程).这显然不会扩展.如果我们有10,000个线程,每个都有大量的消息活动怎么办?以下是我决定解决问题的方法:
我用这种方法离基地有多远?还有一种更简单的方法可以扩展吗?
我一直在研究iOS项目已有一段时间了,我最近决定将代码移植到Mac项目中.因为我选择在我的代码中使用NSInteger,而NSInteger是一个依赖于环境的类型转换,这意味着我的变量在iOS和Mac应用程序中是不同的类型.
当我在Mac上运行测试套件时,我的所有STAssertEquals调用都会失败并显示错误"Type mismatch - ",因为类型不匹配:
NSInteger foo = 1;
STAssertEquals(foo, 1, nil); // Test fails!!
Run Code Online (Sandbox Code Playgroud)
类似我的标量似乎工作,但这似乎非常混乱:
NSInteger foo = 1;
STAssertEquals(foo, (NSInteger)1, nil); // Succeeds, but is ugly!!
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?我开始怀疑使用NSIntegers的决定是一个糟糕的选择.
更新:也许这篇文章是相关的.它似乎支持类型转换标量.
在我的项目中,我有一个带有龙头处理程序的大容器.在这个容器里面,我也有一个按钮.我的目标是处理背景容器上的所有水龙头,除非用户点击按钮.不幸的是,当我点击按钮时,它会触发按钮上的点击处理程序和容器的点击处理程序.
这是XAML的一些示例:
<Grid Width="250" Height="250" Fill="Red" Tapped="Container_Tapped">
<Button Click="Button_Clicked">
<Rectangle Width="20" Height="20" Fill="Blue" />
</Button>
</Grid>
Run Code Online (Sandbox Code Playgroud)
有没有办法处理按钮上的点击事件,以防止它冒泡到容器?还有其他想法吗?
我有一个各种类型的对象数组和一个类型数组。对于每个对象,我想遍历类型数组并查看对象是否为该类型。像这样的东西:
class Parent {}
class ChildA: Parent {}
class ChildB: Parent {}
class GrandChildA: ChildA {}
var objects: [Any] = ["foo", ChildA(), ChildA(), ChildB(), GrandChildA()]
var classes = [Parent, ChildA, ChildB] // This line doesn't compile!!
for obj in objects {
for cls in classes {
if obj is cls {
NSLog("obj matches type!")
}
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为您不能将类存储在数组中。据我了解,您可以存储类类型,例如ChildA.self
:
ChildA().dynamicType == ChildA.self // true
Run Code Online (Sandbox Code Playgroud)
但这不处理子类:
ChildA().dynamicType == Parent.self // false
Run Code Online (Sandbox Code Playgroud)
显然is
操作符解决了子类的情况:
ChildA() is Parent // …
Run Code Online (Sandbox Code Playgroud) 更新:看起来iOS 10已修复此问题.我升级到Swift 3和Xcode 8,一切都按预期工作.
我现在已经遇到过这个问题了几次,我不知道它是否是SKCropNode中的一个错误,或者我只是在滥用它.也许有一些文件我不知道为什么会发生这种情况?
我有一个100x100矩形形状的裁剪节点作为蒙版.如果我在其中放置一个蓝色圆圈,它会被正确裁剪.
// Create a crope node with a small square.
let cropNode = SKCropNode()
let cropNodeMask = SKShapeNode(rect: CGRect(x: 0, y: 0, width: 100, height: 100))
cropNodeMask.fillColor = UIColor.whiteColor()
cropNode.maskNode = cropNodeMask
self.addChild(cropNode)
// Create a blue circle and put it in the crop node.
let blueCircle = SKShapeNode(circleOfRadius: 110)
blueCircle.fillColor = UIColor.blueColor()
blueCircle.strokeColor = UIColor.clearColor()
cropNode.addChild(blueCircle)
Run Code Online (Sandbox Code Playgroud)
现在,当我将同一个圆放在一个空的SKNode中并将该容器放在同一个裁剪节点内时,裁剪失败.
// Create a crope node with a small square.
let cropNode = SKCropNode()
let cropNodeMask = SKShapeNode(rect: …
Run Code Online (Sandbox Code Playgroud) 在我的Windows应用商店应用中,我创建了一个ScrollViewer(里面有一个Grid),里面有几个TextBox.每当用户点击ScrollViewer中的任何位置时,第一个TextBox就会被聚焦.我不知道为什么会这样,而且肯定不是我想要的行为.
这只是XAML尝试"有帮助"的症状吗?我该如何预防呢?
编辑:我发现了一个线索.这只发生在我的TextBoxes在ScrollViewer中时.它也出现在C++和C#项目中,因此它显然是XAML/WinRT的症状.添加示例XAML:
使用以下XAML,如果我聚焦第二个TextBox然后单击框之间边距中的任意位置,则第一个TextBox会自动聚焦.我不希望它成为焦点.
<ScrollViewer Background="#111111"
VerticalScrollBarVisibility="Auto">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox Grid.Row="0" />
<TextBox Grid.Row="1" />
</Grid>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud) 在具有块级范围的语言中,我有时会创建任意块,这样我就可以封装局部变量,而不会让它们污染其父级的范围:
func myFunc() {
// if statements get block level scope
if self.someCondition {
var thisVarShouldntExistElsewhere = true
self.doSomethingElse(thisVarShouldntExistElsewhere)
}
// many languages allow blocks without conditions/loops/etc
{
var thisVarShouldntExistElsewhere = false
self.doSomething(thisVarShouldntExistElsewhere)
}
}
Run Code Online (Sandbox Code Playgroud)
当我在Swift中执行此操作时,它认为我正在创建一个闭包并且不执行代码.我可以创建它作为一个闭包并立即执行,但这似乎会带来执行开销(不值得为代码清洁).
func myFunc() {
// if statements get block level scope
if self.someCondition {
var thisVarShouldntExistElsewhere = true
self.doSomethingElse(thisVarShouldntExistElsewhere)
}
// converted to closure
({
var thisVarShouldntExistElsewhere = false
self.doSomething(thisVarShouldntExistElsewhere)
})()
}
Run Code Online (Sandbox Code Playgroud)
在Swift中是否支持这样的东西?
我正在尝试本地化我的WinRT应用程序.我不需要任何太花哨的东西,所以我一直在XAML元素上使用x:Uid以及具有诸如"PageTitleTextBox.Text"设置属性的资源文件.这个方法很有效,直到遇到附加属性的问题.
我已经使用类似的标记定义了一些应用栏按钮,这与我在其他示例中看到的相似:
<Button x:Name="AddFolderButton" Click="AddFolderButton_Tapped" x:Uid="FoldersPageAppBarAddFolderButton" AutomationProperties.Name="Test" Style="{StaticResource AppBarButtonStyle}">
<Button.Content></Button.Content>
</Button >
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想本地化AddFolderButton的标签,目前由AutomationProperties.Name
.我尝试在我的资源文件中设置一个键FoldersPageAppBarAddFolderButton.AutomationProperties.Name
,但是在运行时失败了.
是否可以使用XAML本地化此标签,或者我是否需要在代码隐藏文件中以编程方式执行此操作?
我可以使用一些建筑建议.我现在遇到了几次以下问题,我从来没有找到一种真正优雅的方法来解决它.
问题,尽可能在最高级别描述:
我有一个父类,希望充当多个孩子的代理(都使用相同的协议),但是当孩子们在父母上调用方法时,父母不再知道哪个孩子正在打电话.
我想使用松散耦合(委托/协议或通知)而不是直接调用.我不需要多个处理程序,因此通知看起来可能有点矫枉过正.
为了说明这个问题,让我尝试一个超简化的例子:
我从父视图控制器(和相应的视图)开始.我创建了三个子视图,并将它们中的每一个插入到父视图中.我想在用户触摸其中一个孩子时通知父视图控制器.有几个选项可以通知父母:
定义协议.父实现协议并将其自身设置为每个子代的委托.当用户触摸子视图时,其视图控制器调用其委托(父代).在这种情况下,通知父母一个视图被触摸,但它不知道哪一个.还不够好.
与#1相同,但定义协议中的方法也传递某种标识符.当孩子告诉其代表它被触摸时,它也会传递指向自身的指针.这样,父母就知道确切地触摸了哪个视图.对象传递自身的引用似乎很奇怪.
使用NSNotifications.父级为三个子节点中的每一个定义一个单独的方法,然后为这三个子节点中的每一个订阅"viewWasTouched"通知作为通知发送方.孩子们不需要将自己附加到用户词典,但他们确实需要发送带有指针的通知作为范围.
与#4相同,但不是使用单独的方法,父级可以使用带有switch case或其他分支的方法以及通知的发送方来确定要采用的路径.
创建多个中间人类,充当子视图的委托,然后使用指向子节点的指针或其他一些区分因子调用父节点上的方法.这种方法似乎不具备可扩展性.
这些方法中的任何一种都是最佳实践吗?我不能肯定地说,但感觉我错过了一些更明显/优雅的东西.
delegates protocols objective-c nsnotifications nsnotification
我想为我的所有视图模型创建一个抽象基类,但是我遇到了可访问性问题,似乎无法浏览错误.这是我的代码示例:
public ref class ViewModelBase {
...
}
public ref class OtherViewModel : ViewModelBase {
...
}
Run Code Online (Sandbox Code Playgroud)
当我将代码定义为上面的状态时,我收到以下错误:
错误C4585:'MyNamespace :: ViewModelBase':WinRT'公共引用类'必须被密封或从现有的未密封类派生
相反,如果我将ViewModelBase设为私有,则会出现此错误:
错误C3213:基类'MyNamespace :: ViewModelBase'比'OtherViewModel'更难访问
这看起来应该非常简单.我究竟做错了什么?
我正在努力在WinRT项目中创建一个新容器.此容器的行为类似于ListView,因此我决定在其属性中使用类似的名称.
我为ItemsSource创建了一个DependencyProperty来模仿内置的ItemsControl(其他列表的抽象父).ItemsControl将ItemsSource定义为a Platform::Object^
,所以我做了同样的事情.这很好用.
稍后,是时候创建要进入列表的项目,使用指定的ItemsTemplate实例填充它们,并设置它们的数据上下文.这意味着我需要实际将ItemsSource Platform::Object^
转换为可迭代的东西.不幸的是,要将其转换为可迭代的东西,我需要在强制转换中指定模板化类型(例如IIterable<UIElement^>^
或IIterable<Object^>^
).在这个阶段,我并不特别关心它是什么类型的对象,因为我只是将它用作新列表项的DataContext,所以转换为没问题IIterable<Object^>^
.不幸的是,safe_cast不允许我这样做,除非最初设置为ItemsSource的东西也被模板化为某个IIterable<Object^>^
或某个孩子,例如IVectorView<Object^>^
.
使用ListView等现有容器,您可以将ItemsSource设置为a Vector<MyCustomViewModel^>^
而不先将其转换为a Vector<Object^>^
并且它可以正常工作.那他们怎么做呢?他们没有使用safe_cast吗?我很确定使用不太安全的演员阵容会产生不利影响.还有其他想法吗?
TL; DR:
我有一些Platform::Object^
参考,我知道指向其他参考的IIterable.是否有可能以IIterable<Platform::Object^>^
某种方式将其强制转换,即使迭代最初是使用其他模板创建的(例如IIterable<MyCustomViewModel^>^
)?
视图中的内容是否可能与iOS中的状态栏重叠?我不想覆盖整个状态栏 - 只需要一个图形扩展几个像素.
现在商店里有这样的例子吗?或者HIG是否禁止它?
我已经看到了将自己的内容放在iOS状态栏中的应用示例.Reeder可能是最受欢迎的例子.但在Reeder中,内容完全包含在状态栏中.
windows ×4
ios ×3
swift ×3
xaml ×3
c++-cx ×2
objective-c ×2
swift2 ×2
visual-c++ ×2
casting ×1
class ×1
cocoa-touch ×1
css ×1
css3 ×1
delegates ×1
events ×1
flux ×1
font-face ×1
fonts ×1
html5 ×1
instance ×1
iphone ×1
javascript ×1
localization ×1
protocols ×1
reactjs ×1
reactjs-flux ×1
reflection ×1
scope ×1
skcropnode ×1
sprite-kit ×1
statusbar ×1
types ×1
views ×1
windows-8 ×1
wpf ×1